我正在尝试比较两个词典,该程序是在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-loops并使用dictionary.Contains(key)
来获得我想要的结果。
是否有更直截了当的方法?
谢谢
如果您想要" common dictionary "返回,我相信您可以这样做:
var intersectMembers = members1.Keys.Intersect(members2.Keys)
.ToDictionary(t => t, t => members1[t]);
or,替代:
var intersectMembers = members1.Where(x => members2.ContainsKey(x.Key))
.ToDictionary(x => x.Key, x => x.Value);
但是,如果您想要返回的"常见 list ",则Sergey是正确的,您可以实现他的答案。
var commonKeys = members1.Keys.Intersect(members2.Keys); // { 1, 2 }
那将返回 IEnumerable<int>
,但是如果要列表,则可以致电ToList()
。