繁体   English   中英

两个列表之间的实际差异-不包括

[英]Actual difference between two lists - not Except

假设我有清单

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

DotNetFiddle上的工作示例

使用ForEach和lambda表达式的最小示例:

L2.ForEach(x => L1.Remove(x));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM