(C #) iki koleksiyon karşılaştırmak istiyorum, ama bunu verimli bir şekilde uygulamak için en iyi yolu emin değilim.
Enumerable.SequenceEqual ile ilgili diğer konuyu okudum , ama tam olarak aradığım şey değil.
Benim durumumda, her ikisi de aynı öğeleri içeriyorsa (koleksiyon ne olursa olsun) iki koleksiyon eşit olacaktır.
Misal:
collection1 = {1, 2, 3, 4};
collection2 = {2, 4, 1, 3};
collection1 == collection2; // true
Genellikle yaptığım şey, bir koleksiyonun her öğesinde döngü ve diğer koleksiyonda olup olmadığını görmek, sonra diğer koleksiyonun her öğe arasında döngü ve ilk koleksiyonunda olup olmadığını görmek için. (Uzunlukları karşılaştırarak başlarım).
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
Ancak, bu tamamen doğru değildir ve muhtemelen iki koleksiyonu eşitlik için karşılaştırmanın en etkili yolu değildir.
Bunun yanlış olacağını düşünebileceğim bir örnek:
collection1 = {1, 2, 3, 3, 4}
collection2 = {1, 2, 2, 3, 4}
Bu benim uygulamamla eşit olurdu. Her bir öğenin kaç kez bulunduğunu saymalı ve her iki koleksiyonda da sayımların eşit olduğundan emin olmalı mıyım?
Örnekler bir çeşit C # (pseudo-C # diyelim), ancak dilediğiniz dilde cevabınızı verin, önemli değil.
Not: Basitlik için örneklerde tamsayılar kullandım, ancak referans tipi nesneleri de kullanabilmek istiyorum (anahtar olarak doğru davranmıyorlar çünkü içerik değil, yalnızca nesnenin referansı karşılaştırılıyor).