【问题标题】:Remove IList<int> items from IList<int> items [duplicate]从 IList<int> 项目中删除 IList<int> 项目 [重复]
【发布时间】:2013-02-18 17:52:24
【问题描述】:

我正在尝试从 List&lt;int&gt; items2 中删除 List&lt;int&gt; 项目

List<int> item1 = new List<int> {1,2,3,4,5,6,7,8,9,10};
List<int> item2 = new List<int> {1,2,3,4};

从 item1 中删除 item2 值后,所需的结果是

item1 = {5,6,7,8,9,10 }

是否有任何直接方法或任何其他方法可以从另一个项目列表的内容中删除一个项目列表的内容,而不使用“for”或“foreach”?

【问题讨论】:

    标签: c# list


    【解决方案1】:

    某事某处将不得不循环。不过,您不必在 your 源代码中循环。至于你做什么......这取决于你的要求。

    如果您将变量的类型更改为List&lt;int&gt;,您可以使用List&lt;T&gt;.RemoveAll

    item1.RemoveAll(x => item2.Contains(x));
    

    如果您对 item1 更改值以引用不同的列表感到满意,或者您可以只使用 LINQ:

    item1 = item1.Except(item2).ToList();
    

    请注意,以上内容会使item1 成为一组不同的值 - 如果您有任何重复值,它们将被删除(即使它们不在item2 中)。

    没有重复删除方面的替代方案:

    item1 = item1.Where(x => !item2.Contains(x)).ToList();
    

    或者如果item2 很大,则使其性能更好:

    var item2Set = new HashSet<int>(item2);
    item1 = item1.Where(x => !item2Set.Contains(x)).ToList();
    

    【讨论】:

    • +1。 Jon Skeet 从不睡觉:)。像往常一样非常详细的答案。
    猜你喜欢
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多