【问题标题】:Comapring two List<String> to extract the common items and put it in List比较两个 List<String> 以提取共同项并将其放入 List
【发布时间】:2016-05-14 13:25:43
【问题描述】:

我有两个 List 项,如何编写一个 linq 查询来比较两者并提取共同项。(如 List c,如下所示)

List<string> a = {a, b, c, d}
List<string> b = {c, d, e, f}

List<string> c = {c, d}

【问题讨论】:

  • 这么多答案,没有人问列表内部是否可以有重复项,如果可以,这就是预期的结果。

标签: c# asp.net .net linq lambda


【解决方案1】:

使用 LINQ Intersect 方法。

 var commonItems = a.Intersect(b);

变量commonItems 将是列表a 和列表b 中常见项目的集合,即["c","d"]

【讨论】:

    【解决方案2】:

    您也可以拨打List.FindAll:

    List<string> listA = {a, b, c, d}
    List<string> listB = {c, d, e, f}
    
    List<string> listC = listA.FindAll(elem => listB.Contains(elem));
    

    【讨论】:

    • FindAll 与 where 有何不同?
    • FindAllList 方法,Where 返回 IEnumerable&lt;T&gt;FindAll 返回 List&lt;T&gt;
    【解决方案3】:

    因为它们对两个列表都是通用的,所以我们可以只从一个列表中获取也在另一个列表中的项目。像这样:

    List<string> c = a.Intersect(b)
                      .ToList();
    

    这可以读作:“从列表 a 中选择项目,使得列表 b 中的至少一项具有相同的值。”

    请注意,这仅适用于具有可用相等方法的值类型和引用类型。

    【讨论】:

      【解决方案4】:

      如果您想使用 linq where 查询来执行此操作:

      var c = a.Where(x => b.Contains(x))
      

      【讨论】:

        【解决方案5】:

        Linq 方式:

           List<string> c = (from i in a
                             join j in b
                             on i equals j
                             select i).ToList();
        

        【讨论】:

        • ToString() 电话是为了...?
        • 不是真的需要,我修好了。谢谢!
        猜你喜欢
        • 2022-11-21
        • 2014-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多