形成两个列表并集的最简单方法
Posted
技术标签:
【中文标题】形成两个列表并集的最简单方法【英文标题】: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
【问题讨论】:
如果有人正在寻找更动态的方法,请观看:***.com/questions/6948587/… 【参考方案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
【讨论】:
以上是关于形成两个列表并集的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章