检查一个字典中的所有条目是否在另一个字典中。

4
我有两个字典A和B,我想查看A中的所有条目是否存在于B中。过去我使用以下方法比较列表:
var set1 = new HashSet<String>(list1);
var set2 = new HashSet<String>(list2);

return set1.SetEquals(set2);

我想做的就是简单地使用循环遍历字典A中的每个值,方法如下:
dictA.TryGetValue(dictBvalue, out item)

如果没有值,则此操作将在项变量上返回 null,但这似乎有点冗长。

有没有一种快速有效的比较字典的方法?

谢谢。

3个回答

5
您可以使用All扩展程序来实现此操作。
var allexist = list1.All(x=> list2.ContainsKey(x.Key) && list2[x.Key] == x.Value)

笔误,应该是 x :-) - Hari Prasad
这个程序能够快速高效地完成我需要的功能,谢谢 :) - Dan Hall
只是为了澄清,如果list1中的所有项都在list2中,则返回true;如果list1中的任何项不在list2中,则返回false? - Dan Hall
谢谢您 :) 我还有一个问题要问,是否有办法使用与上面相同的简单方法将未在list2中找到的键输出到新列表中? - Dan Hall
使用以下语句list1.Keys.Where(k=>!list2.ContainsKey(k)).ToList(),可以返回在list2中不存在的list1的键。 - Hari Prasad
让我们在聊天中继续这个讨论 - Dan Hall

0
这是解决方案,如果你想要循环遍历每一个值。
Dictionary<string, string> dictA = new Dictionary<string, string>();
Dictionary<string, string> dictB = new Dictionary<string, string>();
bool allexist = true;

foreach (var itemA in dictA)
{
    if (!dictB.ContainsKey(itemA.Key))
    {
        allexist = false;
    }
}

有很多优化可能,可以与此答案中的DictionaryEquals方法进行比较。 - synek317

0

那只是我用列表做的一个例子,这种情况下我正在寻找字典的类似解决方案。我会查看那个链接,谢谢。 - Dan Hall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接