【问题标题】:C#: Gets unmatched elements between 2 collections with Linq & LambdaC#:使用 Linq 和 Lambda 在 2 个集合之间获取不匹配的元素
【发布时间】:2013-07-23 15:36:32
【问题描述】:

我有两个集合,比较它们并希望得到不匹配的项目并放入一个新集合中。我不想使用使用 2 foreach 循环的传统方法。如何使用 linq 和 lambda 表达式来实现它? 例如

    int[] collection1 = new int[] { 1, 2, 3, 4, 5 };
    int[] collection2 = new int[] { 2, 3 };
    // Goal: Using Linq and Lambda Expression: the new collection3 should contain 1, 4, 5

已编辑:抱歉我忘了提:collection2 是 collection1 的子集,因此 collection2 中的所有元素都必须存在于 collection1 中。

【问题讨论】:

  • 请澄清:如果集合是{1,2}{2,3},结果应该是什么?
  • 嗨,Henrik,谢谢。我已经编辑了。

标签: c# linq lambda


【解决方案1】:

这样的?

int[] collection3 = collection1.Except(collection2).ToArray();

【讨论】:

  • 我认为你需要做另一个 Except 反过来
【解决方案2】:
var result = collection1.Except(collection2).Concat(collection2.Except(collection1)).ToArray();

【讨论】:

    【解决方案3】:

    你可以使用Enumerable.Except Method:

    var result = collection1.Except(collection2);
    

    如 cmets 中所述,如果还应添加第二个集合中的唯一元素,您的代码将如下所示:

    var result = collection1.Except(collection2).Concat(collection2.Except(collection1));
    

    【讨论】:

      【解决方案4】:
      int[] collection3 = collection1.Union(collection2).Except(collection1.Intersect(collection2)).ToArray();
      

      【讨论】:

        猜你喜欢
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-19
        • 2011-03-28
        • 1970-01-01
        • 2012-12-04
        • 2020-02-23
        相关资源
        最近更新 更多