2011-08-03 13 views
10

Duplicar posibles:
Getting the “diff” between two arrays in C#?Una mejor manera de encontrar una diferencia entre dos matrices

¿Hay una mejor manera de obtener la diferencia de dos matrices?

var a = new int[] { 1, 2, 3 }; 
var b = new int[] { 2, 3, 4 }; 

foreach (var d in a.Except(b).Union(b.Except(a))) 
    Console.WriteLine(d); // 1 4 
+0

Primero debe definir cuál es la "diferencia" entre dos matrices. –

+0

Hay muchas de las mismas preguntas en SO – sll

+0

¿Mejor en qué sentido? –

Respuesta

8

Usted está buscando el symmetric-difference, un operador que LINQ a objetos no tiene todavía (a partir de .NET 4.0). La forma en que lo ha hecho está perfectamente bien, aunque es posible que desee considerar extraer ese bit en un método propio.

Sin embargo, una forma más eficiente de lograr esto sería con el método HashSet<T>.SymmetricExceptWith.

var result = new HashSet<int>(a); 
result.SymmetricExceptWith(b); 

foreach (var d in result) 
    Console.WriteLine(d); // 1 4 
+1

Esto parece ser mucho mejor que mi enfoque, gracias :) – MrCoocoo

4

tratar

a.Union(b).Except(a.Intersect(b)) 
+1

Para mí, este método parece más claro que el método en la pregunta original. De cualquier manera está bien, sin embargo. –

0

Creo que lo que tiene es probablemente la mejor manera de hacerlo desde el punto de vista del código simple.

Dependiendo de cuál sea su objetivo final, puede haber formas de hacerlo más legible.

Cuestiones relacionadas