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

90

如何最简单地将两个列表 A 和 B 中的元素进行比较,并将 B 中存在但不在 A 中的元素添加到 A 中?

例如,假设有以下两个列表:

A = {1, 2, 3}

B = {3, 4, 5}

执行操作 A∪B 后,希望得到:

A = {1, 2, 3, 4, 5}


如果有人正在寻找更动态的方法,请查看此链接:https://dev59.com/jmw05IYBdhLWcg3w6GAw - UNeverNo
需要注意的是,如果您不需要列表特定的某些方面(例如维护顺序),则存在HashSet以防止重复。 - fenix.shadow
5个回答

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

3
由于在搜索相关操作时,此答案首先弹出,因此添加Intersect会很好。 - Joel Bourbonnais
1
感谢您对所有相关方法进行了详细的解释。非常感谢您,继续保持。 - Shehan Silva

31
最简单的方法是使用 LINQ 的 Union 方法:
var aUb = A.Union(B).ToList();

10

使用 LINQ 的 Union 方法。

Enumerable.Union(ListA,ListB);
或者
ListA.Union(ListB);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接