2011-02-10 88 views
6

Tengo dos listas y una de ellas tiene 5 elementos y la otra tiene 4 elementos. Tienen algunos mismos elementos pero también tienen elementos diferentes. Quiero crear una lista con su elemento diferente. ¿Cómo puedo hacerlo?¿cómo se pueden comparar elementos de dos listas con linq?

Nota: la lista de 5 elementos es mi lista principal.

+0

posible duplicado de [Linq encuentra diferencias en dos listas] (http://stackoverflow.com/questions/2404301/linq-find-differences-in-two-lists) – AakashM

Respuesta

16

¿Qué tal esto?

var list1 = new List<int>(new []{1,2,3,4,5}); 
var list2 = new List<int>(new []{1,3,4}); 
var list3 = list1.Except(list2); 

En este caso, list3 contendrá 2 y 5 solamente.

EDITAR

Si desea que los elementos de ambos conjuntos que son únicas, el siguiente código debería ser suficiente:

var list1 = new List<int>(new []{1,2,3,4,5}); 
var list2 = new List<int>(new []{1,3,4,7}); 
var list3 = list1.Except(list2).Union(list2.Except(list1)); 

salida será 2,5 y 7.

+0

wow so pure. Gracias – cagin

+0

Sin embargo, esta no es una verdadera diferencia establecida: simplemente excluye los elementos en la secuencia 1 que también están en la secuencia 2. (No incluirá los elementos que están en la secuencia 2 que no están en la secuencia 1.) –

+0

La respuesta de Jason en [el enlace proporcionado en el comentario de la pregunta] (http://stackoverflow.com/questions/2404301/linq-find-differences-in-the-lists) de AakashM proporciona una forma de producir una verdadera diferencia de conjunto bidireccional. –

1

Si Es curioso, el opuesto de esto se llama Intersecta

string[] collection1 = new string[] { "1", "7", "4" }; 
string[] collection2 = new string[] { "6", "1", "7" }; 

var resultSet = collection1.Intersect<string>(collection2); 

foreach (string s in resultSet) 
{ 
    Console.WriteLine(s); 
} 
Cuestiones relacionadas