使用C#处理带有重复项的列表联合

6
我正在尝试理解如何处理可能有重复项的两个列表的并集或合并。 例如,List1具有{A,B,C},而List2具有{B,C,D}。 我尝试使用Union操作,并获得了一个新列表,其中包含值(A,B,C,D}。但是,我需要来自第二个列表而不是第一个列表的B和C值。 是否有一种指定联合方法的方式,以使用重复的值。
我现在正在使用的代码是:
var newList = List1.Union<Object>(List2).ToList();

感谢您的任何帮助。 Javid

4
你如何知道它们来自其中一个列表而不是另一个? - Alfred Myers
是的,我确实尝试过通过使用List2.Union(List1)来反转列表。然而,这会改变顺序,最终得到一个像{B,C,D,A}这样的列表。我的目标是保留List1的顺序,并用List2中的重复项替换它。 抱歉,我之前应该明确这一点。 - user320587
1
我是唯一一个完全不知道你在这里想要实现什么的人吗?当你有重复项时,你怎么能分辨出哪个是哪个? - Ε Г И І И О
4个回答

7

Union(并集)在逻辑上是一个集合操作,而Concat(连接)才是您要寻找的。

List1.Concat(List2)

ConcatList1List2 中的结果 BC 都加入到最终结果中,而不仅仅是来自 List2BC - Matt Arnold

2

你能只做这个吗:

var newList = List2.Union<Object>(List1).ToList(); 

我建议您将它们反转,因为这样做可能会得到您需要的结果。
编辑:
显然这种方法不起作用。抱歉,我没有测试过,这只是对问题的第一反应。
那么,怎么样使用上面的反转符号,然后调用List.Sort()以按照您想要的顺序排列它们呢?这假设您有一个属性来排序,但如果没有更优雅的解决方案,您甚至可以人为地创建一个属性。

0

你试过了吗?

var newList = List2.Union<Object>(List1).ToList();

0

你可以考虑将你的列表 Join 起来。这样操作之后,你就可以检查每个重复的 "join" 对象了...


嗨,Rob,你有任何示例代码吗?我对Linq还很陌生,想尽可能多地理解它。谢谢。 - user320587
抱歉,我的帖子里有一个链接隐藏着:http://www.hookedonlinq.com/OuterJoinSample.ashx - Rob Fonseca-Ensor

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