2011-08-03 17 views
10

Powiel możliwe:
Getting the “diff” between two arrays in C#?Lepszym sposobem na znalezienie różnicy między dwiema tablicami

Czy istnieje lepszy sposób, aby uzyskać różnicę dwóch tablic?

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

Najpierw należy zdefiniować "różnicę" między dwiema tablicami. –

+0

Istnieje wiele takich samych pytań na temat SO – sll

+0

Lepiej w jakim sensie? –

Odpowiedz

8

Patrzysz na symmetric-difference, operatora, który LINQ to Objects nie ma jeszcze (jak .NET 4.0). Sposób, w jaki to zrobiłeś, jest zupełnie niezły - chociaż możesz chcieć rozważyć wypakowanie tego fragmentu do własnej metody.

Jednak bardziej skutecznym sposobem osiągnięcia tego byłoby zastosowanie metody HashSet<T>.SymmetricExceptWith.

+1

To wydaje się być lepsze niż moje podejście, dzięki :) – MrCoocoo

4

spróbować

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

Dla mnie ta metoda wydaje się bardziej przejrzysta niż metoda w oryginalnym pytaniu. Tak czy inaczej jest dobrze, –

0

Myślę, że to, co masz, jest prawdopodobnie najlepszym sposobem na zrobienie tego z punktu widzenia prostego kodu.

W zależności od tego, jaki jest Twój cel końcowy, mogą istnieć sposoby na zwiększenie czytelności.

Powiązane problemy