我正在尝试比较两个词典,该程序是用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(密钥),并且名称(值)是否相同无关紧要。
我一直在搜索Intersect
和Except
,但我觉得它不像我想要的那样有用。
通过上面的示例,如果我调用Intersect
函数,我希望它返回List<int>{1, 2}
。
如果我打电话给members1.Except(members2)
,我希望它返回
Dictionary<int, string> intersectMembers{
{1, "adam"},
}
我想做的解决方案是编写2个for循环并使用dictionary.Contains(key)
来获得我想要的结果。
有没有更直接的方法呢?
由于
答案 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()
。