如何使用LINQ单行实现通过中间映射字典聚合值生成新字典
可以实现,单行LINQ写法如下:
var result = values.GroupBy(kv => map[kv.Key], kv => kv.Value).ToDictionary(g => g.Key, g => g.Sum());
逻辑说明
- 遍历
values字典的所有键值对,以map中对应原始键的映射值作为分组依据 - 分组时仅保留每个键值对的数值作为分组内的元素
- 最终将分组结果转换为目标字典,键为分组的映射值,值为对应分组所有数值的总和
如果存在values的键不在map中的场景,可以提前加过滤逻辑避免抛出异常:
var result = values.Where(kv => map.ContainsKey(kv.Key)) .GroupBy(kv => map[kv.Key], kv => kv.Value) .ToDictionary(g => g.Key, g => g.Sum());
内容的提问来源于stack exchange,提问作者mortysporty
相关产品推荐
相关产品推荐

