将具有相同键的多个词典组合成一个具有值总和的字典
INPUT
字典1
“a”,“1”
“b”,“2”
字典2
“a”,“3”
“b”,“4”
字典3
“a”,“5”
“b”,“6”
输出(上面的词典的连接)
最后的字典
“a”,“9”
“b”,“12”
我写了一个伪代码:
- 创建一个Final空字典。
- 循环遍历词典列表。
- 遍历KeyValue对。
- 检查密钥是否存在于最终字典中。 如果是,则将KeyValue对中的值添加到final字典中。 如果没有,则将KeyValue对添加到字典中
由于这需要两个foreach循环,因此c#中有一个lync版本,并且不会抛出任何exception。
我在stackoverflow上提到的一些问题是将多个字典合并为一个字典
您可以使用SelectMany
将每个字典中的所有键值对连接成一个序列,然后您可以按键对其进行分组,并将每个键的值相加以确定最终值:
var dictionaries = new[] { new Dictionary() { { "a", 1 }, { "b", 2 } }, new Dictionary() { { "a", 3 }, { "b", 4 } }, new Dictionary() { { "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);
此解决方案适用于任意数量的词典 – 而不仅仅是固定的词典集。
上述就是C#学习教程:将具有相同键的多个词典组合成一个具有值总和的字典分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
var dict1 = new Dictionary() { { "a", 1 }, { "b", 2 } }; var dict2 = new Dictionary() { { "a", 3 }, { "b", 4 } }; var dict3 = new Dictionary() { { "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));
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/953825.html