【问题标题】:Compare Keys in Two Dictionaries比较两个字典中的键
【发布时间】:2014-03-03 23:42:47
【问题描述】:

我正在尝试比较两个字典,程序是用 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(key),name(value)是否相同都无所谓。

我一直在搜索并找到 IntersectExcept,但我认为它的工作方式与我想要的不太一样。

对于上面的示例,如果我调用 Intersect 函数,我希望它返回 List&lt;int&gt;{1, 2}

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

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

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

有没有更直接的方法?

谢谢

【问题讨论】:

    标签: c# dictionary compare intersect except


    【解决方案1】:

    如果您希望返回“通用字典”,我相信您可以这样做:

       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”,那么 Sergey 是对的,您可以实施他的答案。

    【讨论】:

      【解决方案2】:
       var commonKeys = members1.Keys.Intersect(members2.Keys); // { 1, 2 }
      

      这将返回IEnumerable&lt;int&gt;,但如果您需要列表,可以调用ToList()

      【讨论】:

      • 我以为他想要第三本字典?
      • @JasonRoell 但 OP 声明 我希望它返回 List{1, 2}
      • 哦,我想我刚刚看到关于“如果我调用类似 members1.Except(members2) 的部分,我希望它返回 Dictionary intersectMembers{ {1, "adam"} , }"
      • 同意,问题也可以这样解释,+1 来自我
      • 任何一种方式都适合我。尽管通过返回列表,我仍然可以简单地使用列表中的值作为键来构造第三个字典。我认为这只是一步或两步的问题。非常感谢:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多