假设我有清单

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中找到它们的次数。

我可以写出来-希望我不必这样做。

最佳答案

如果您要自己编写,则可能看起来像这样:

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


Working example on DotNetFiddle

关于c# - 两个列表之间的实际差异-不包括,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48433691/

10-12 21:59