在c#中合并字典,使通用键存在

本文关键字:存在 合并 字典 | 更新日期: 2023-09-27 18:05:53

我有两个字典

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");

我希望我已经说明了我的要求。

任何帮助都是真诚的感谢

谢谢

在c#中合并字典,使通用键存在

一种可能的方法:

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

Dotnetfiddle Demo

上面的代码只是过滤DictA中存在testDict键的项,然后将结果投影到一个新的字典实例

您可以使用LINQ:

var resultDict = testDict.Keys.Intersect(DictA.Keys)
   .ToDictionary(t => t, t => DictA[t]);

您可以在两个字典之间进行连接。像这样(在这里输入,所以可能有点偏离):

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

在两个表之间执行类似于数据库中的Join操作。第二个和第三个参数表示您希望在每个字典的Key上进行连接(对每一侧进行相同的处理)。最后一个参数表示"对于每个匹配,从DictA中选择键值项(并丢弃来自testDict的项)",最后将弹出的KeyValuePairs序列转换回字典形式。