需要帮助在 C# 中联接两个对象列表

本文关键字:两个 列表 对象 帮助 | 更新日期: 2023-09-27 18:34:41

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

最好的方法是什么?

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

就我而言,我不想保留

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

有没有更清洁/更短的方法可以做到以下几点?

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

需要帮助在 C# 中联接两个对象列表

试试这个:

var resultlist = list1.Union(list2);
var list1 = new List<string>{"A", "B", "C"};
var list2 = new List<string>{"B", "C", "D"};
var list = list1.Union(list2);

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

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

当然,如果您只保留第二个列表,则第一个列表中不存在的第二个列表中的所有项目将自动忽略。

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

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

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

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