2013-06-09 3 views
0

Если у меня есть два списка, и я хочу элементы, которые являются общими в обоих списках, я могу использовать этот код:Как выбрать элементы, которые не пересекаются?

var listC = listA.Intersect(listB); 

Однако, если я хочу, чтобы элементы, которые не являются общими? И без дубликатов? возможно с пересечением?

Спасибо.

ответ

1

Да, это возможно. Это называется Enumerable.Except.

Используйте это:

var result = listA.Except(listB); //maybe a .ToList() at the end, 
//or passing an IEqualityComparer<T> if you want a different equality comparison. 
3

Ни ответа до сих пор будет включать в себя элементы из listB, которые не являются в listA. Чтобы получить любой элемент, который находится в либо списке, но не в оба списка:

listA.Union(listB).Except(listA.Intersect(listB)); 
+0

В качестве альтернативы, вы можете также сделать 'listA.Except (listB) .Union (listB.Except (listA)) ' –

+0

+1, это лучший ответ, чем мой. –

1

Наиболее эффективным:

var set = new HashSet<T>(listA); 
set.SymmetricExceptWith(listB); 
Смежные вопросы