比较两个词典中的键

时间:2014-02-06 20:05:52

标签: c# dictionary compare intersect except

我正在尝试比较两个词典,该程序是用C#Visual Studio 2010编写的。

Dictionary<int, string> members1 = new Dictionaries<int, string>{
    {1, "adam"},
    {2, "bob"},
    {3, "cameron"}
}

Dictionary<int, string> members2 = new Dictionaries<int, string>{
    {1, "adam"},
    {2, "bill"},
    {4, "dave"}
}

我想找到相同的id(密钥),并且名称(值)是否相同无关紧要。

我一直在搜索IntersectExcept,但我觉得它不像我想要的那样有用。

通过上面的示例,如果我调用Intersect函数,我希望它返回List<int>{1, 2}

如果我打电话给members1.Except(members2),我希望它返回

Dictionary<int, string> intersectMembers{
    {1, "adam"},
}

我想做的解决方案是编写2个for循环并使用dictionary.Contains(key)来获得我想要的结果。

有没有更直接的方法呢?

由于

2 个答案:

答案 0 :(得分:5)

如果您想要返回“Common Dictionary ”,我相信您可以这样做:

   var intersectMembers =  members1.Keys.Intersect(members2.Keys)
                                  .ToDictionary(t => t, t => members1[t]);

或,或者

   var intersectMembers =  members1.Where(x => members2.ContainsKey(x.Key))
                             .ToDictionary(x => x.Key, x => x.Value);

然而,如果您想要返回“Common List ”,那么谢尔盖是对的,您可以实现他的答案。

答案 1 :(得分:3)

 var commonKeys = members1.Keys.Intersect(members2.Keys); // { 1, 2 }

这将返回IEnumerable<int>,但如果您想要列表,可以致电ToList()