合并字典避免ArgumentException,重复键实现值累加
合并字典时重复键值累加的解决方案
问题分析
你遇到的报错源于原代码误用了SelectMany——在foreach里遍历单个字典时,对单个字典调用SelectMany(d => d),此时d是键值对类型而非可枚举集合,编译器无法推断泛型参数,因此抛出类型推断错误。同时原代码用First()仅取第一个值,完全不符合你累加重复键值的需求。
正确实现(无需拆分键值列表再循环)
直接对整个字典列表操作,通过分组求和生成合并后的字典:
// 生成合并后的字典:重复键的值累加 var mergedDict = listOfDict .SelectMany(dict => dict) // 将所有字典的键值对扁平化为一个序列 .GroupBy(kvp => kvp.Key) // 按键分组 .ToDictionary(group => group.Key, group => group.Sum(kvp => kvp.Value)); // 每组值求和,生成新字典 // 将合并后的字典添加到原字典列表中 listOfDict.Add(mergedDict);
代码说明
SelectMany(dict => dict):把字典列表中所有字典的键值对展开成连续的键值对序列,无需手动拆分键和值的列表GroupBy(kvp => kvp.Key):将相同键的所有键值对归为一组ToDictionary(...):将分组转换为最终字典,每个键对应的值是该组所有值的总和
内容的提问来源于stack exchange,提问作者LordAhune
相关产品推荐
相关产品推荐

