public static IEnumerable<T> Minus<T>(this IEnumerable<T> enum1, IEnumerable<T> enum2)
{
Dictionary<T, int> elements = new Dictionary<T, int>();
foreach (var el in enum2)
{
int num = 0;
elements.TryGetValue(el, out num);
elements[el] = num + 1;
}
foreach (var el in enum1)
{
int num = 0;
if (elements.TryGetValue(el, out num) && num > 0)
{
elements[el] = num - 1;
}
else
{
yield return el;
}
}
}
Это не удалит дубликаты из enum1.Пояснение:
- {'A', 'A'} - {'A'} == {'A'}
- {'A', 'A'}- {'A'} == {}
Я делаю первое, Enumerable. За исключением второго.