首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何验证是否所有字典KVP都包含在列表中某些其它字典中

如何验证是否所有字典KVP都包含在列表中某些其它字典中
EN

Stack Overflow用户
提问于 2019-06-19 06:46:32
回答 2查看 72关注 0票数 1

我有一个字典A(假设包含3个KVP)和一个包含许多KVP的字典列表。我需要验证是否有一些字典包含了字典A中的所有KVP。

字典A- 3KVP

列表A,其中包括3个字典,每个字典包含20KVP。

如何验证列表A中是否存在包含字典A中的所有KVP的字典?

EN

回答 2

Stack Overflow用户

发布于 2019-06-19 06:54:54

使用LINQ的AnyAll方法可以非常简单地检查列表中的任何字典是否包含另一个字典的所有键/值对。

类似于下面这样的代码就可以做到:

代码语言:javascript
运行
复制
var result = list.Any(d => dict.All(x => d.ContainsKey(x.Key) && d[x.Key] == x.Value));

这将检查列表中的任何字典是否具有与我们的目标字典具有相同值的所有键。

正如@mjwills在评论中指出的那样,通过使用字典的TryGetValue方法,您可以避免多次查找。这将如下所示:

代码语言:javascript
运行
复制
var result = list.Any(d => dict.All(x => d.TryGetValue(x.Key, out var val) && val == x.Value));

这里假设一些值看起来像这样:

代码语言:javascript
运行
复制
var list = new List<Dictionary<string,string>> {
    new Dictionary<string,string> {
        {"1","1"},
        {"2","2"},
        {"3","3"}
    },
    new Dictionary<string,string> {
        {"4","4"},
        {"5","5"},
        {"6","6"}
    },
    new Dictionary<string,string> {
        {"7","7"},
        {"8","8"},
        {"9","9"}
    }
};

var dict = 
    new Dictionary<string,string> {
        {"7","7"},
        {"8","8"},
        {"9","9"}
    };
票数 4
EN

Stack Overflow用户

发布于 2019-06-20 00:22:36

正确的答案将取决于代码和代码部分是什么类型(例如,如果其中一个是代码,则相等比较更棘手),但通常情况下,假设所有键和值都正确地实现了它们的Equals GetHashCode Value 方法,我们可以使用<代码>D15扩展方法<代码>D16和<代码>D17来获得结果。

Except方法返回第一个集合(compareDict)中不在第二个集合(列表中的字典)中的所有项:

代码语言:javascript
运行
复制
bool result = listOfDict.Any(dict => !compareDict.Except(dict).Any());

这表示,“当我们检查比较字典中所有条目与列表中每个字典之间的差异时,如果在至少一次比较中没有来自比较字典的剩余条目(否则返回false__),则返回true”。

这是因为Dictionary<TKey, TValue>实现了IEnumerable<KeyValuePair<TKey, TValue>>,而KeyValuePair<TKey, TValue>实现了Equals,这样如果KeyValue相等,它就会返回true

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56657978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档