形成两个列表的并集的最简单方法

时间:2012-11-22 03:57:14

标签: c# .net linq list union

比较两个列表的元素的最简单方法是将A和B相互比较,只有在A中不存在时才将B中存在的元素添加到A中?

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

所以在我想要的AUB操作之后 清单A = {1,2,3,4,5}

5 个答案:

答案 0 :(得分:109)

如果是列表,您也可以使用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

答案 1 :(得分:27)

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

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

答案 2 :(得分:8)

使用LINQ的Union

Enumerable.Union(ListA,ListB);

ListA.Union(ListB);

答案 3 :(得分:5)

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

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

var listMerged = listA.Union(listB);

答案 4 :(得分:0)

如果这是两个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