我有两个词典。
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");
我希望得到一个字典,以便testDict的键存在,并且存在DictA中存在的那些键的值。
因此示例合并字典应如下所示:
Dictionary<string, string> DictMerged = new Dictionary<string, string>();
DictMerged.Add("Name", "Sarah");
DictMerged.Add("City", "NY");
我希望我已经能够解释我的要求..
我试过..
testDict.Concat(DictA)
.GroupBy(kvp => kvp.Key, kvp => kvp.Value)
.ToDictionary(g => g.Key, g => g.Last());
但这也给了我DictA'State',我不想要......
真心感谢任何帮助
由于
答案 0 :(得分:5)
我认为你正在寻找这个:
var result =
testDict.ToDictionary(
i => i.Key,
i => DictA.ContainsKey(i.Key) ? DictA[i.Key] : i.Value);
// result:
// {"Name", "Sarah"}
// {"City", "NY"}
答案 1 :(得分:2)
如果您定义了GetOrDefault
扩展方法here
然后你可以做
var result = testDict.ToDictionary(
kvp => kvp.Key,
kvp => DictA.GetOrDefault(kvp.Key, kvp.Value));
这与使用DictA.ContainsKey(kvp.Key) ? DictA[kvp.Key] : i.Value
之间的区别在于,DictA
只进行了一次查找,而当密钥存在时,只有两次查找。
答案 2 :(得分:0)
这样可行
var testDict = new Dictionary<string, string> { { "Name", "John" }, { "City", "NY" } };
var DictA = new Dictionary<string, string> { { "Name", "Sarah" }, { "State", "ON" } };
var mergedDict = testDict.ToDictionary(keyVal => keyVal.Key, keyVal => DictA.ContainsKey(keyVal.Key) ? DictA[keyVal.Key] : keyVal.Value);