列表字典到(扁平)列表

本文关键字:列表 扁平 字典 | 更新日期: 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没有正确覆盖EqualsGetHashCode,这可能无法按预期工作。