在C#中合并字典,以便存在公共密钥

时间:2015-08-02 13:21:56

标签: c# c#-4.0

我有两个词典。

Dictionary<string, string> testDict = new Dictionary<string, string>();
            testDict.Add("Name", "John");
            testDict.Add("City", "NY");

Dictionary<string, string> DictA = new Dictionary<string, string>();
            DictA.Add("Name", "Sarah");
            DictA.Add("State", "ON");

我希望得到一个字典,只有DictA这样的元组才能与testDict具有相同的密钥

因此示例合并字典应如下所示:

Dictionary<string, string> DictMerged = new Dictionary<string, string>();
                DictMerged.Add("Name", "Sarah");

我希望我已经能够解释我的要求..

真心感谢任何帮助

由于

3 个答案:

答案 0 :(得分:2)

一种可能的方式:

var DictMerged = DictA.Where(o => testDict.ContainsKey(o.Key))
                      .ToDictionary(o => o.Key, o => o.Value);

<强> Dotnetfiddle Demo

上面的代码只是在DictA中过滤了testDict项中的项密钥,然后将结果投影到新的字典实例中。

答案 1 :(得分:1)

您可以使用LINQ

执行此操作
var resultDict = testDict.Keys.Intersect(DictA.Keys)
   .ToDictionary(t => t, t => DictA[t]);

答案 2 :(得分:0)

您可以在两个词典之间进行连接。像这样的东西(输入这里,所以可能会有点偏差):

dictA
    .Join(testDict, kv => kv.Key, kv => kv.Key, (kva, kvt) => kva)
    .ToDictionary(kv => kv.Key, kv => kv.Value)

这样可以在两个表之间的数据库中进行连接。第二个和第三个参数是说你想加入每个词典的Key(每个词的处理方式相同)。最后一个参数说“对于每个匹配,从DictA中选择键值项(并从testDict中丢弃一个)”,最后将弹出的KeyValuePairs序列转换回字典形式。