C# 列表字典到(展平)列表
我有一本C# 列表字典到(展平)列表,c#,linq,dictionary,C#,Linq,Dictionary,我有一本类型的字典和一个MyClass类型的列表。现在,我想检查字典中是否有不包含在任何列表中的元素。我的第一种方法是嵌套两个循环(一个用于实际列表,一个用于字典中的列表)。如果找到一个项目,我可能会中断内部循环,并继续使用外部循环中的下一个元素 foreach (MyClass feature in features) { bool found = false; foreach (var kv in this._features) // this._features is t
类型的字典和一个MyClass
类型的列表。现在,我想检查字典中是否有不包含在任何列表中的元素。我的第一种方法是嵌套两个循环(一个用于实际列表,一个用于字典中的列表)。如果找到一个项目,我可能会中断内部循环,并继续使用外部循环中的下一个元素
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。我认为如果我将字典的值平铺成一个列表,可能会奏效,但我不知道如何实现这一点 使用
选择many
将值展平为IEnumerable
然后使用Except
获取差异:
var differentElements = this._features.SelectMany(x => x.Value).Except(features);
result.AddRange(differentElements);
如果
MyClass
没有正确覆盖Equals
和GetHashCode
,这可能不会像预期的那样工作。您可能可以使用Select()、SelectMany()和Where()来做一些事情,您可以分享您的尝试吗?为什么要缩短这个工作代码?哇,这似乎是我需要的。谢谢,我想我必须稍微改变一下表达式的顺序,因为我想从功能列表中选择那些不包含在字典中的元素,我想您编写它的方式会检查字典中不在列表中的元素。