Определите относительное дополнение двух наборов IEnumerable <T> в .NET.

Есть ли простой способ получить относительный дополнение двух наборов? Возможно, используя LINQ?

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

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

Ответ 1

Вы пробовали 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