可能重複:
Getting the 「diff」 between two arrays in C#?一種更好的方式找到兩個陣列
有沒有更好的辦法讓兩個數組的區別?
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
可能重複:
Getting the 「diff」 between two arrays in C#?一種更好的方式找到兩個陣列
有沒有更好的辦法讓兩個數組的區別?
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
您正在尋找的symmetric-difference,那LINQ到對象沒有,但(作爲.NET 4.0)操作。你做這件事的方式完全沒問題 - 儘管你可能想考慮把它提取出來,用它自己的方法。
但是,實現這一點的更有效的方法是使用HashSet<T>.SymmetricExceptWith
方法。
var result = new HashSet<int>(a);
result.SymmetricExceptWith(b);
foreach (var d in result)
Console.WriteLine(d); // 1 4
這似乎比我的方法更好,謝謝:) – MrCoocoo
嘗試
a.Union(b).Except(a.Intersect(b))
對我來說,這個方法似乎比原始問題中的方法更清晰,但是無論哪種方式都沒有問題, –
我認爲你所擁有的可能是從簡單代碼的角度來做這件事的最好方法。
儘管取決於您的最終目標是什麼,但可能有方法使其更具可讀性。
您應該首先定義兩個數組之間的「差異」。 –
關於SO – sll
有很多相同的問題在哪些方面更好? –