What\'s the simplest way to perform a set subtraction given two arrays in C#? Apparently this is dead easy in Ruby. Basically I just want to remove the elements from array <
If you're using Linq, you can use the Except operator like this:
string [] c = a.Except(b).ToArray();
Edit: CodeInChaos makes a good point. If a
contains duplicates, it will remove any duplicates as well. The alternative to make it function exactly like the Ruby version would be this:
string [] c = a.Where(x=>!b.Contains(x)).ToArray();
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;
}
}
}
This won't remove duplicates from enum1. To be clear:
I do the first, Enumerable.Except does the second.