在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");
我希望我已经说明了我的要求。
任何帮助都是真诚的感谢
谢谢
一种可能的方法:
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序列转换回字典形式。