.net – 尝试从两个List对象中获取不同的值

我有2个List对象:

List<int> lst1 = new List<int>();
List<int> lst2 = new List<int>();

假设他们有价值观:

lst1.Add(1);
lst1.Add(2);
lst1.Add(3);
lst1.Add(4);

lst2.Add(1);
lst2.Add(4);

我需要得到一个包含这两者的“不同”列表的对象;所以在这种情况下,返回将是List {2,3}.

是否有捷径可寻?或者我是否需要遍历列表中的每个值并进行比较?

我愿意使用ObjectQuery,LINQ等,因为这些列表来自数据库,并且可能长达数百到数千个条目.

谢谢!

我相信Ahmad几乎是正确的,但是这不会给你在lst2但不在lst1中的物品.所以在你给出的例子中,如果你向lst2添加了5,我想你想要的结果是{2,3,5}.在这种情况下,您需要对称差异.我认为在单个调用中没有任何方法可以直接在LINQ to Objects中执行此操作,但您仍然可以实现它.这是一种简单但低效的方法:

lst1.Union(lst2).Except(lst1.Intersect(lst2)).ToList();

(显然,如果你真的需要List< T>而不是IEnumerable< T>,你只需要ToList().)

阅读本文的方法是“我想要列在任何一个列表中的项目,但不是两个列表中的项目.”

使用Concat可能会更有效 – 这仍然可以工作,因为Except是一个基于集合的运算符,它只会返回不同的结果:

lst1.Concat(lst2).Except(lst1.Intersect(lst2)).ToList();
翻译自:https://stackoverflow.com/questions/2561407/trying-to-get-distinct-values-from-two-listint-objects

转载注明原文:.net – 尝试从两个List对象中获取不同的值