INPUT
词典1
" a"," 1"
" b"," 2"
词典2
" a"," 3"
" b"," 4"
词典3
" a"," 5"
" b"," 6"
OUTPUT(上面词典的连接)
最后的字典
" a"," 9"
" b"," 12"
我为此编写了一个伪代码:
由于这需要两个foreach循环,因此在c#中有一个lync版本,并且它不会抛出任何异常。
我在stackoverflow上提到的一些问题是Combine multiple dictionaries into a single dictionary
答案 0 :(得分:10)
var dict1 = new Dictionary<string, int>() { { "a", 1 }, { "b", 2 } };
var dict2 = new Dictionary<string, int>() { { "a", 3 }, { "b", 4 } };
var dict3 = new Dictionary<string, int>() { { "a", 5 }, { "b", 6 } };
var resDict = dict1.Concat(dict2)
.Concat(dict3)
.GroupBy(x => x.Key)
.ToDictionary(x => x.Key, x => x.Sum(y=>y.Value));
答案 1 :(得分:4)
您可以使用SelectMany
将每个字典中的所有键值对连接成一个序列,然后您可以按键分组并对每个键的值求和以确定最终值:
var dictionaries = new[] {
new Dictionary<String, Int32>() { { "a", 1 }, { "b", 2 } },
new Dictionary<String, Int32>() { { "a", 3 }, { "b", 4 } },
new Dictionary<String, Int32>() { { "a", 5 }, { "b", 6 } }
};
var result = dictionaries
.SelectMany(d => d)
.GroupBy(
kvp => kvp.Key,
(key, kvps) => new { Key = key, Value = kvps.Sum(kvp => kvp.Value) }
)
.ToDictionary(x => x.Key, x => x.Value);
此解决方案适用于任意数量的词典 - 而不仅仅是固定的词典集。