2009-04-03 7 views
18
List<int> a = 1,2,3 
List<int> b = 2,4,5 

output 
1,3,4,5 
+0

En caso 3 también estará en la salida? – Dave

+0

Supongo que sí ... eso estaría en los datos que no se entrecruzan. –

+0

Esto tiene una respuesta mucho mejor aquí https://stackoverflow.com/questions/5620266/the-opposite-of-intersect – Amicable

Respuesta

37

El truco es utilizar Except con la intersección de las dos listas.

Esto debe darle la lista de elementos no entrecruzadas:

var nonIntersecting = a.Union(b).Except(a.Intersect(b)); 
4

y experimentados:

List<int> a = new List<int>(){1, 2, 3}; 
List<int> b = new List<int>(){2, 4, 5}; 


List<int> c = a.Except(b).Union(b.Except(a)).ToList(); 
+0

Quiero encontrar la parte que no se cruza –

+0

He actualizado mi respuesta. –

+0

¡La respuesta de Reed Copsey es la mejor! –

-1

Otra forma:

List<int> a = new List<int> { 1, 2, 3 }; 
List<int> b = new List<int> { 2, 4, 5 }; 
var nonIntersecting = a.Union(b) 
    .Where(x => !a.Contains(x) || !b.Contains(x)); 
+0

esto es o (n^3) ........................................ –

Cuestiones relacionadas