2010-01-13 19 views
13

Tengo una lista grande (~ 110,000 cadenas), que necesito comparar con una lista de tamaño similar.¿La mejor manera de comparar dos listas de cadenas grandes, usando C# y LINQ?

La lista A proviene de 1 sistema. La lista B proviene de una tabla SQL (solo puedo leer, sin procesos almacenados, etc.)

¿Cuál es la mejor forma de encontrar qué valores hay en la lista A, que ya no existen en la lista B?

¿Hay 100.000 cadenas de un número grande para manipular en una matriz?

gracias

+0

Cuando dice que la lista b proviene de una tabla sql, ¿significa que la lista b está cargada en la memoria, o es algo así como un dataset de lector sql donde solo puede ver un elemento a la vez? – kemiller2002

+0

¿Está utilizando Linq para SQL para su lista b? –

+0

Estoy usando un compilador de tablas, por lo que está en la memoria para los datos de la tabla SQL (Lista B). Lista A Estaba leyendo en una ArrayList, pero podría usar List . – Donaldinio

Respuesta

26

lo que tiene dos listas de este modo:

List<string> listA; 
List<string> listB; 

A continuación, utilice Enumerable.Except:

List<string> except = listA.Except(listB).ToList(); 

Tenga en cuenta que si usted quiere, por ejemplo, ignorar caso:

List<string> except = listA.Except(listB, StringComparer.OrdinalIgnoreCase).ToList(); 

Usted puede reemplazar el último parámetro con un IEqualityComparer<string> de su elección.

9

Con LINQ:

var missing = listA.Except(listB).ToList(); 
+0

Agradable. Similar a esto: http://msdn.microsoft.com/en-us/library/bb397894.aspx No estoy acostumbrado a tratar con grandes conjuntos de datos, por lo que 100,000 se maneja fácilmente de esta manera? – Donaldinio

+0

Claro; y si no es así, tendrá que trabajar en la base de datos, por lo que C# está fuera de todos modos ;-p –

2
List<string> A = //get from file 
List<string> B = //get from db 

var C = A.Except(B); 
5

Fuera de interés, qué tienes que utilizar List<string>? Porque en .NET 3.5 SP1, puede usar el HashSet y es el método ExceptWith. A mi entender, los HashSets están específicamente optimizados para las comparaciones entre dos conjuntos.

+0

No es necesario que utilice List . Echaré un vistazo a HashSet. ¡Gracias! – Donaldinio

Cuestiones relacionadas