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


74

比较两个列表(例如A和B)的元素并仅将A中不存在的元素添加到A中的最简单方法是什么?

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

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


如果有人正在寻找一种更动态的方法,请注意:stackoverflow.com/questions/6948587/…–
UNeverNo

Answers:


138

如果是列表,则还可以使用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.

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

  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
由于搜索相关操作时首先弹出此答案,因此添加Intersect
Joel Bourbonnais

感谢您对所有相关方法的详细说明。非常感谢你。保持。
Shehan Silva



5

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

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

var listMerged = listA.Union(listB);

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.