我需要合并三个字典集合,如果密钥相同,我想添加值。
Result is like
One - 5+5 =10
two - 10+20=30
three - 7
four - 2
five - 8
six - 2
Dictionary<string, int> d1 = new Dictionary<string, int>();
d1.Add("one", 5);
d1.Add("two", 10);
d1.Add("three", 7);
Dictionary<string, int> d2 = new Dictionary<string, int>();
d2.Add("four", 2);
d2.Add("two", 20);
d2.Add("five", 8);
Dictionary<string, int> d3 = new Dictionary<string, int>();
d3.Add("one", 5);
d3.Add("six", 2);
Union:忽略匹配的结果集。
var uQuery =(来自d1中的a选择a).Union(来自d中的b选择b).GroupBy(grp =&gt; grp.Key);
答案 0 :(得分:1)
您应该使用Concat而不是Union。 Union会将键值对[“one”,5]视为d1和d3中的重复,因此排除它的一个实例,得出以下结果:
var result = d1.Concat(d2.Concat(d3)).GroupBy(keyValuePair => keyValuePair.Key).ToDictionary(group => group.Key, grp => grp.Sum(kvp => kvp.Value));
或者更可读:
var union = d1.Concat(d2.Concat(d3));
var groupBy = union.GroupBy(keyValuePair => keyValuePair.Key);
var result = groupBy.ToDictionary(group => group.Key, grp => grp.Sum(kvp => kvp.Value));