Лучший способ найти разницу между двумя массивами
Возможный дубликат:
Получение "diff" между двумя массивами в С#?
Есть ли лучший способ получить разницу между двумя массивами?
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
Ответы
Ответ 1
Вы ищете симметричную разницу, оператор, который LINQ to Objects еще не имеет (с .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
Ответ 2
попробовать
a.Union(b).Except(a.Intersect(b))
Ответ 3
Я думаю, что у вас есть, вероятно, лучший способ сделать это с точки зрения простого кода.
В зависимости от вашей конечной цели могут быть способы сделать ее более читаемой.