列表字典到(扁平)列表
本文关键字:列表 扁平 字典 | 更新日期: 2023-09-27 18:21:57
我有一个<MyKey, List<MyClass>>
类型的字典和一个MyClass
类型的List。现在我想检查后者中是否有元素不包含在字典中的任何列表中。我的第一种方法是嵌套两个循环(一个用于实际列表,一个用于字典中的列表)。若找到一个项目,我可以打破内部循环,继续使用外部循环中的下一个元素。
foreach (MyClass feature in features)
{
bool found = false;
foreach (var kv in this._features) // this._features is the dictionary
{
if (kv.Value.Contains(feature))
{
found = true;
continue;
}
}
if (!found) result.Add(feature);
}
到目前为止,这是有效的,但我更喜欢一种更短的方法,可能使用LINQ。我认为如果我把字典的值放在一个列表中,这可能会奏效,但我不知道如何实现这一点。
使用SelectMany
将您的值扁平化为IEnumerable<MyClass>
,然后使用Except
获得差异:
var differentElements = this._features.SelectMany(x => x.Value).Except(features);
result.AddRange(differentElements);
如果MyClass
没有正确覆盖Equals
和GetHashCode
,这可能无法按预期工作。