我们说我有名单
var L1 = new List<int>{1,1,2};
var L2 = new List<int>{1};
如果我这样做
L1.Except(L2)
我得到List<int>{2}
- 足够公平。
但有没有像L1.Minus(L2)
那样的简写,我会得到List<int>{1,2}
基本上只删除项目在L2中找到它们的次数。
我可以写出来 - 希望我不必这样做。
答案 0 :(得分:3)
如果您是自己写的,它可能看起来像这样:
mov dx, OFFSET PSPSEG:interrupt_handler
如果您对可读性不那么担心,或者可能是这样:
public static class ExtensionMethods
{
static public IEnumerable<T> Minus<T>(this IEnumerable<T> input, IEnumerable<T> removal)
{
var result = input.ToList();
foreach (var r in removal) result.Remove(r);
return result;
}
}
使用示例:
public static class ExtensionMethods
{
static public IEnumerable<T> Minus<T>(this IEnumerable<T> input, IEnumerable<T> removal)
{
var remaining = removal.ToList();
return input.Where
(
a => !remaining.Remove(a)
);
}
}
输出:
public class Program
{
public static void Main()
{
var L1 = new List<int>{1,1,2};
var L2 = new List<int>{1};
var L3 = L1.Minus(L2);
foreach (var l in L3)
{
Console.WriteLine(l);
}
}
}
答案 1 :(得分:2)
使用ForEach和lambda表达式的最小示例:
L2.ForEach(x => L1.Remove(x));