【问题标题】:How to remove each item that appears in first collection from second collection using linq?如何使用 linq 从第二个集合中删除第一个集合中出现的每个项目?
【发布时间】:2013-08-31 18:53:49
【问题描述】:

假设我有 2 个集合:

1) {1, 2, 3, 5}
2){2, 5}

我想从第一个集合中删除第二个集合中出现的每个项目,所以我会得到:

{1, 3}

问题:

  1. 如何使用Join OP 来做到这一点(使用扩展方法语法更好)?
  2. 还有什么方法可以像嵌套 for/foreach 循环一样遍历两个集合?

修改:
同时迭代两个集合您可以使用嵌套的from 子句:

from boy in boys
from girl in girls
select boy + "+" + girl

我第一次发现这种语法是必要的:)

【问题讨论】:

  • 为什么使用Join?它根本不需要Join :)
  • 任何想法如何同时迭代两个集合?不是在当前问题的背景下,但我只是想知道,因为在很多情况下我需要这个功能
  • 将第一个集合中的每个项目与第二个集合中的项目进行比较
  • 比较如何?你想获得的具体回报是多少?
  • 例如,我有一个字符串集合,我需要构建一个出现在每个字符串中的字符集合,所以我需要遍历所有字符的集合并为每个字符检查它是否出现在第一个集合的每个字符串中。我会用 2 个 foreach/for 循环来做到这一点,但是否可以使用 Linq 来完成?

标签: c# linq linq-to-objects


【解决方案1】:

这可以满足你的需要

var solution = list1.Except(list2);

你可以找到关于除here的更多细节,但基本思路是:

这个方法首先返回那些没有出现在 第二。它也不会在第二秒返回那些不 首先出现。

【讨论】:

  • 我是个傻瓜)忘记了这个方法)谢谢!
  • 我会接受你最初的回答。 BTW ToList 方法将执行大部分时间不需要的查询
  • 如果您不希望返回数据的方式,我将删除 ToList :)
【解决方案2】:

简单。使用Except

var newList = list1.Except(list2).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多