2011-08-03 42 views
10
arasında bir fark bulmak için daha iyi bir yolu

Olası Çoğalt:
Getting the “diff” between two arrays in C#?İki dizideki

İki dizinin farkını almak için daha iyi bir yolu var mı?

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

İki dizge arasında "fark" olanı ilk olarak tanımlamalısınız. –

+0

SO – sll

+0

'da aynı soruların birçoğu Ne anlamda daha iyi? –

cevap

8

deneyin. Bunu yaptığınız şey mükemmel bir şekilde iyidir - ancak bu parçayı kendi başına bir yönteme ayırmayı düşünebilirsiniz. Bununla birlikte, bunu gerçekleştirmenin daha verimli bir yolu, HashSet<T>.SymmetricExceptWith yöntemiyle olacaktır.

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

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

Bu benim yaklaşımından daha iyi görünüyor, teşekkürler :) – MrCoocoo

4

, Sen symmetric-difference aradığınız Objects LINQ (.NET 4.0 itibariyle) henüz bulunmayan bir operatöre

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

Bana göre, bu yöntem orijinal sorudaki yöntemden daha net görünüyor. Her iki yol da olsa iyi. –

0

Bence, sahip olduğunuz şey muhtemelen bunu basit kod açısından yapmanın en iyi yoludur.

Son hedefinizin ne olduğuna bağlı olarak, daha okunabilir hale getirmenin yolları olabilir.