Saya ingin membandingkan dua koleksi (dalam C #), tapi saya tidak yakin cara terbaik untuk mengimplementasikan ini secara efisien.
Saya telah membaca utas lainnya tentang Enumerable.SequenceEqual , tapi bukan itu yang saya cari.
Dalam kasus saya, dua koleksi akan sama jika keduanya berisi item yang sama (tidak peduli urutannya).
Contoh:
collection1 = {1, 2, 3, 4};
collection2 = {2, 4, 1, 3};
collection1 == collection2; // true
Apa yang biasanya saya lakukan adalah untuk mengulang setiap item dari satu koleksi dan melihat apakah ada di koleksi lain, kemudian loop melalui setiap item dari koleksi lain dan melihat apakah ada di koleksi pertama. (Saya mulai dengan membandingkan panjangnya).
if (collection1.Count != collection2.Count)
return false; // the collections are not equal
foreach (Item item in collection1)
{
if (!collection2.Contains(item))
return false; // the collections are not equal
}
foreach (Item item in collection2)
{
if (!collection1.Contains(item))
return false; // the collections are not equal
}
return true; // the collections are equal
Namun, ini tidak sepenuhnya benar, dan itu mungkin bukan cara yang paling efisien untuk membandingkan dua koleksi untuk kesetaraan.
Contoh yang bisa saya pikirkan adalah salah:
collection1 = {1, 2, 3, 3, 4}
collection2 = {1, 2, 2, 3, 4}
Yang akan sama dengan implementasi saya. Haruskah saya menghitung berapa kali setiap item ditemukan dan memastikan bahwa jumlahnya sama di kedua koleksi?
Contoh-contohnya ada dalam semacam C # (sebut saja pseudo-C #), tetapi berikan jawaban Anda dalam bahasa apa pun yang Anda inginkan, itu tidak masalah.
Catatan: Saya menggunakan bilangan bulat dalam contoh untuk kesederhanaan, tetapi saya ingin dapat menggunakan objek tipe referensi juga (mereka tidak berperilaku benar sebagai kunci karena hanya referensi objek dibandingkan, bukan konten).