una son listas lista iguales elementos comparar c# collections

son - comparar elementos de una lista c#



La forma más rápida de comparar dos listas (6)

A partir de 3.5, puede usar una función LINQ para esto:

List<string> l1 = new List<string> {"Hello", "World","How","Are","You"}; List<string> l2 = new List<string> {"Hello","World","How","Are","You"}; Console.WriteLine(l1.SequenceEqual(l2));

También conoce una sobrecarga para proporcionar su propio comparador

Tengo una lista (Foo) y quiero ver si es igual a otra lista (foo). ¿Cuál es la manera más rápida?


Algo así como usar Match Action.

public static CompareList<T>(IList<T> obj1, IList<T> obj2, Action<T,T> match) { if (obj1.Count != obj2.Count) return false; for (int i = 0; i < obj1.Count; i++) { if (obj2[i] != null && !match(obj1[i], obj2[i])) return false; } }


Algo como esto:

public static bool CompareLists(List<int> l1, List<int> l2) { if (l1 == l2) return true; if (l1.Count != l2.Count) return false; for (int i=0; i<l1.Count; i++) if (l1[i] != l2[i]) return false; return true; }

Es posible que se requiera una verificación adicional de errores (por ejemplo, null-cheques).


Aquí están los pasos que haría:

  1. Haga un object.ReferenceEquals () si es verdadero, luego devuelva true.
  2. Verifique el conteo, si no es el mismo, devuelva falso.
  3. Compara los elementos uno por uno.

Aquí hay algunas sugerencias para el método:

  1. Base la implementación en ICollection. Esto le da el conteo, pero no se restringe al tipo de colección específica o al tipo contenido.
  2. Puede implementar el método como un método de extensión para ICollection.
  3. Deberá usar los .Equals () para comparar los elementos de la lista.

Suponiendo que quiere decir que quiere saber si los CONTENIDOS son iguales (no solo la referencia de objeto de la lista).

Si va a realizar la comprobación de igualdad con mucha más frecuencia que las inserciones, puede que le resulte más eficiente generar un código hash cada vez que se inserta un valor y comparar códigos hash al realizar la comprobación de igualdad. Tenga en cuenta que debe considerar si el orden es importante o simplemente que las listas tienen contenidos idénticos en cualquier orden.

A menos que compares muy a menudo, creo que esto normalmente sería un desperdicio.


Un atajo, que no vi mencionar, es que si sabe cómo se crearon las listas, puede unirlas en cadenas y compararlas directamente.

Por ejemplo...

En mi caso, quería pedirle al usuario una lista de palabras. Quería asegurarme de que cada palabra comenzara con una letra, pero después de eso, podría contener letras, números o guiones bajos. Me preocupa especialmente que los usuarios usen guiones o comiencen con números.

Utilizo expresiones regulares para dividirlo en 2 listas y las vuelvo a unir y las comparo como cadenas:

var testList = userInput.match(/[-|/w]+/g) /*the above catches common errors: using dash or starting with a numeric*/ listToUse = userInput.match(/[a-zA-Z]/w*/g) if (listToUse.join(" ") != testList.join(" ")) { return "the lists don''t match"

Como sabía que ninguna lista contendría espacios, y que las listas solo contenían cadenas simples, podía unirlas con un espacio y compararlas.