【问题标题】:Simplest way to form a union of two lists形成两个列表并集的最简单方法
【发布时间】:2012-11-10 10:28:55
【问题描述】:

比较两个列表中的元素的最简单方法是 A 和 B,然后将 B 中存在的元素添加到 A 中,前提是它们不存在于 A 中?

为了说明, 取列表 A = {1,2,3} 列表 B = {3,4,5}

所以我想要的AUB手术后 列表 A = {1,2,3,4,5}

【问题讨论】:

标签: c# .net linq list union


【解决方案1】:

如果是列表,也可以使用AddRange方法。

var listB = new List<int>{3, 4, 5};  
var listA = new List<int>{1, 2, 3, 4, 5};

listA.AddRange(listB); // listA now has elements of listB also.

如果您需要新列表(并排除重复项),您可以使用Union

  var listB = new List<int>{3, 4, 5};  
  var listA = new List<int>{1, 2, 3, 4, 5};
  var listFinal = listA.Union(listB);

如果您需要新列表(并包括重复的),您可以使用Concat

  var listB = new List<int>{3, 4, 5};  
  var listA = new List<int>{1, 2, 3, 4, 5};
  var listFinal = listA.Concat(listB);

如果需要常用物品,可以使用Intersect

var listB = new List<int>{3, 4, 5};  
var listA = new List<int>{1, 2, 3, 4};  
var listFinal = listA.Intersect(listB); //3,4

【讨论】:

  • 由于搜索相关操作时首先弹出这个答案,所以加Intersect
  • 感谢您对所有相关方法的详细解释。非常感谢。坚持下去。
【解决方案2】:

最简单的方法是使用LINQ的Union方法:

var aUb = A.Union(B).ToList();

【讨论】:

    【解决方案3】:

    使用 LINQ 的 Union

    Enumerable.Union(ListA,ListB);
    

    ListA.Union(ListB);
    

    【讨论】:

      【解决方案4】:

      我认为这就是你真正需要做的:

      var listB = new List<int>{3, 4, 5};
      var listA = new List<int>{1, 2, 3, 4, 5};
      
      var listMerged = listA.Union(listB);
      

      【讨论】:

        【解决方案5】:

        如果是两个 IEnumerable 列表则不能使用AddRange,但可以使用Concat

        IEnumerable<int> first = new List<int>{1,1,2,3,5};
        IEnumerable<int> second = new List<int>{8,13,21,34,55};
        
        var allItems = first.Concat(second);
        // 1,1,2,3,5,8,13,21,34,55
        

        【讨论】:

          猜你喜欢
          • 2021-12-13
          • 1970-01-01
          • 2014-07-02
          • 2016-11-07
          • 1970-01-01
          • 2015-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多