在 C# 中合并和更新两个列表
我有两个 List
对象:
例如:
List 1:
ID,值,其中 Id 已填充且值为空,并且包含从 1 到 10 的 ID。
1、“”
2、“”
...
10、""
列表2:
ID、Value 和其他属性都填充了值,但该列表在 ID 方面是列表 1 的子集。 (例如只有 3 件商品)
2,67
4,90
5,98
我想要的是合并列表 1,但具有更新的值。 有谁有任何好的扩展方法可以执行此操作或任何优雅的代码来执行此操作。 最终列表应为:
ID、值
1、“”
2,67 //列表 2 中的值
3、“”
4,90
5,98
6、“”
...
10、“”
I have two List<T>
objects:
For example:
List 1:
ID, Value where Id is populated and value is blank and it contains say IDs from 1 to 10.
1,""
2,""
...
10,""
List 2:
ID, Value and other attributes all filled with values but this list is a subset of List 1 in terms of IDs. (e.g only 3 items)
2,67
4,90
5,98
What I want is a merged list 1, but with updated values. Does anyone have any good extension method which will do this or any elegent code to perform this operation. The final list should be:
ID, Value
1,""
2,67 //value from list 2
3,""
4,90
5,98
6,""
...
10,""
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
使用linq:list1=list2.Union(list1);
use linq: list1=list2.Union(list1);
我可能会使用字典而不是列表:
如果您正在谈论对象的属性,这会更棘手,但仍然可行。
I would probably use a dictionary rather than a list:
If you are talking about properties of an object, it will be trickier, but still doable.
这是 O(m*n) 但应该可以完成任意列表的工作
如果保证列表是有序的,那么它可以以更多代码为代价降低到 O(n)。 该算法将是
This is O(m*n) but should do the job for arbitrary lists
If the lists are guaranteed ordered, then it could be brought down to O(n) at the cost of more code. The algortihm would be
如果两个列表均按 ID 排序,则可以使用经典合并算法的变体:
请注意,这还要求
list2
是list1 的严格子集
就 ID 而言(即list1
实际上包含list2
的所有 id)当然您也可以将其包装在扩展方法中
If you have both lists sorted by ID, you can use a variation of the classical merge algorithm:
Note that this also requires
list2
to be a strict subset oflist1
in terms of ID (i.e.list1
really contains all ids oflist2
)Of course you can also wrap this in an extension method