0

使用我的两个对象列表,我想保留基于字符串键的唯一项的总集合,其中任何冲突都来自第一个列表,任何未命中都来自第二个列表。换句话说,我想忽略第一个列表中不在第二个列表中的任何项目,但我想保留第二个列表中确实存在的所有项目以及第二个列表中的任何剩余项目。

最好的方法是什么?

编辑:这个问题比简单的联合更微妙。联合将连接两个列表中的不同项目。在发生冲突的情况下,它会从外部列表中获取项目。

就我而言,我不想保留 List1 中的一些项目,因为它们不存在于 List2 中,而我确实想保留列表 2 中的所有项目。

是否有更清洁/更短的方法来执行以下操作?

var remaining = allowedItems.Except(recentItems)
var allowedRecentItems = recentItems.Intersect(allowedItems)
var result = allowedRecentItems.Concat(remaining);
4

4 回答 4

2

尝试这个:

var resultlist = list1.Union(list2);
于 2012-05-21T04:36:59.967 回答
0
var list1 = new List<string>{"A", "B", "C"};
var list2 = new List<string>{"B", "C", "D"};
var list = list1.Union(list2);
于 2012-05-21T04:30:28.360 回答
0

使用第二个列表就可以了。直接翻译您的要求会产生: list1.Intersect(list2).Union(list2)哪些结果 list2

于 2012-05-21T04:45:21.020 回答
0

如果我理解正确 - 你应该只保留第二个列表。这样你的两个条件都满足了

  • 我想忽略第一个列表中不在第二个列表中的任何项目

如果你只保留第二个列表,那么第一个列表中不存在于第二个列表中的所有项目将被自动忽略。

  • 我想保留第二个列表中确实存在的所有项目以及第二个列表中的任何剩余项目

另一方面,将自动选择两个列表中存在的项目,包括仅存在于第二个列表中的项目。

如果这不是您想要的,那么您应该检查List.Distinct()List.Except()List.Union()扩展方法。

于 2012-05-21T05:08:15.360 回答