2011-08-03 33 views
10

thể trùng lặp:
Getting the “diff” between two arrays in C#?Một cách tốt hơn để tìm ra sự khác biệt giữa hai mảng

Có cách nào tốt hơn để có được sự khác biệt của hai mảng?

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

Bạn nên xác định đầu tiên "khác biệt" giữa hai mảng là gì. –

+0

Có rất nhiều câu hỏi giống nhau trên SO – sll

+0

Tốt hơn theo nghĩa nào? –

Trả lời

8

Bạn đang tìm kiếm symmetric-difference, một nhà điều hành mà LINQ to Objects không vẫn chưa (như của .NET 4.0). Cách bạn đã làm nó hoàn toàn ổn - mặc dù bạn có thể muốn xem xét giải nén bit đó ra thành một phương thức riêng của nó.

Tuy nhiên, cách hiệu quả hơn để hoàn thành điều này sẽ là phương pháp HashSet<T>.SymmetricExceptWith.

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

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

Điều này có vẻ tốt hơn cách tiếp cận của tôi, cảm ơn :) – MrCoocoo

4

thử

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

Đối với tôi, phương pháp này có vẻ rõ ràng hơn phương pháp trong câu hỏi ban đầu. Dù cách nào cũng tốt, mặc dù vậy, –

0

Tôi nghĩ rằng những gì bạn có có lẽ là cách tốt nhất để làm điều này từ quan điểm của mã đơn giản.

Tùy thuộc vào mục tiêu cuối cùng của bạn là gì, có thể có nhiều cách để làm cho nó dễ đọc hơn.

Các vấn đề liên quan