我有两个字典dict1和dict2。
我删除了公用密钥并存储在otherEntry中。
var otherEntry = dict1.Keys.Except(dict2.Keys);
如何将“ otherEntry”的数据添加到新的Dictionary dict3中?
答案 0 :(得分:3)
根据我对要求的理解
将两个词典中所有不常见的项目都放入,并放入新词典中
请考虑以下内容
var dict3 = dict1.Concat(dict2)
.GroupBy(_ => _.Key)
.Where(_ => _.Count() == 1)
.SelectMany(_ => _)
.ToDictionary(_ => _.Key, _ => _.Value);
按键对两个集合进行分组,并仅采用单个项目组,因为这将排除两个集合中都存在的项目,而其余部分则保留下来。
从那里开始,只需根据其余项目创建字典即可。
答案 1 :(得分:3)
我会说
Dictionary<string, string> dict1 = new Dictionary<string, string>();
dict1.Add("abc", "hello");
dict1.Add("def", "world");
Dictionary<string, string> dict2 = new Dictionary<string, string>();
dict2.Add("hij", "bonjour");
dict2.Add("abc", "le monde");
Dictionary<string, string> dict3 = dict1
.Where(kvp => !dict2.ContainsKey(kvp.Key))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
答案 2 :(得分:2)
您只需要将otherEntry
与dict1
一起加入即可。 Join
运算符将返回IEnumerable,您需要使用ToDictionary
方法将其转换为Dictionary,因为您希望将Dictionary作为结果。
dict1
.Join(otherEntry, d1 => d1.Key, other => other, (d1, other) => d1)
.ToDictionary(d1 => d1.Key, d1 => d1.Value);
或者,您也可以使用等效于左外部联接的LINQ来实现相同的结果
var otherEntry =
from d1 in dict1
join d2 in dict2 on d1.Key equals d2.Key into matchingGroup
where !matchingGroup.Any()
select d1;
var dict3 = otherEntry.ToDictionary(d3 => d3.Key, d3 => d3.Value);
答案 3 :(得分:1)
您可以通过循环foreach
进行操作
foreach (KeyValuePair<string, List<string>> item in dict1) {
otherEntry.Add(item);
if (dict2.ContainsKey(item.Key)) {
dict2.Remove(item.Key);
}
}
然后
foreach (KeyValuePair<string, List<string>> item in dict2) {
otherEntry.Add(item);
}