2010-06-02 1 views
11

Есть ли простой способ получить relative complement двух наборов? Возможно, используя LINQ?Определить относительное дополнение двух наборов IEnumerable <T> в .NET.

Я должен найти относительный комплимент множества А относительно В. А и В имеют тип HashSet<T>, но я думаю, что алгоритм может быть более общим (IEnumerable<T> или даже ISet<T>)?

Я мог бы использовать решение либо на VB.NET, либо на C#.

ответ

26

Вы попробовали Enumerable.Except?

setB.Except(setA) 

Пример:

HashSet<int> setB = new HashSet<int> { 1, 2, 3, 4, 5 }; 
HashSet<int> setA = new HashSet<int> { 1, 3, 5, 7 }; 
HashSet<int> result = new HashSet<int>(setB.Except(setA)); 

foreach (int x in result) 
    Console.WriteLine(x); 

Результат:

 
2 
4 
+0

большое спасибо !!! – SFun28