Me gustaría comparar dos colecciones (en C #), pero no estoy seguro de la mejor manera de implementar esto de manera eficiente.
He leído el otro hilo sobre Enumerable.SequenceEqual , pero no es exactamente lo que estoy buscando.
En mi caso, dos colecciones serían iguales si ambas contienen los mismos artículos (sin importar el orden).
Ejemplo:
collection1 = {1, 2, 3, 4};
collection2 = {2, 4, 1, 3};
collection1 == collection2; // true
Lo que generalmente hago es recorrer cada elemento de una colección y ver si existe en la otra colección, luego recorrer cada elemento de la otra colección y ver si existe en la primera colección. (Comienzo comparando las longitudes).
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
Sin embargo, esto no es del todo correcto, y probablemente no sea la forma más eficiente de comparar dos colecciones para la igualdad.
Un ejemplo que puedo pensar que estaría mal es:
collection1 = {1, 2, 3, 3, 4}
collection2 = {1, 2, 2, 3, 4}
Lo que sería igual a mi implementación. ¿Debo contar la cantidad de veces que se encuentra cada artículo y asegurarme de que los recuentos sean iguales en ambas colecciones?
Los ejemplos están en algún tipo de C # (llamémoslo pseudo-C #), pero dé su respuesta en el idioma que desee, no importa.
Nota: Usé números enteros en los ejemplos por simplicidad, pero también quiero poder usar objetos de tipo referencia (no se comportan correctamente como claves porque solo se compara la referencia del objeto, no el contenido).