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上提到的一些问题是将多个字典组合成一个字典
Ese*_*ser 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));
Run Code Online (Sandbox Code Playgroud)
您可以使用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);
Run Code Online (Sandbox Code Playgroud)
此解决方案适用于任意数量的字典 - 而不仅仅是一组固定的字典。