C#中如何将元组字典中同K1的数值汇总到新字典
解决方法:按元组键的K1汇总值生成新字典
嘿,这个需求其实很好解决!我先给你举个具体的场景例子,再一步步讲实现方式~
假设你的dict1是这样的结构(以C#为例):
// 示例字典:元组键包含K1和K2,值为int类型 var dict1 = new Dictionary<(string K1, string K2), int> { { ("A", "X"), 10 }, { ("A", "Y"), 20 }, { ("B", "X"), 15 }, { ("B", "Z"), 5 }, { ("C", "Y"), 30 } };
你单独用ToDictionary达不到预期,是因为需要先按K1分组再汇总值,结合LINQ的GroupBy就能搞定:
方法一:用LINQ实现(简洁高效)
var dict2 = dict1 // 按元组键的K1字段对所有键值对分组 .GroupBy(kv => kv.Key.K1) // 将分组结果转换为新字典:组的Key作为dict2的键,组内所有值的总和作为对应值 .ToDictionary(group => group.Key, group => group.Sum(kv => kv.Value));
运行后dict2的结果就是:
- "A" → 30(10+20)
- "B" → 20(15+5)
- "C" → 30
方法二:手动循环实现(适合不想用LINQ的场景)
如果偏好更直观的写法,也可以手动遍历原字典,逐个累加值:
// 初始化空字典,键的类型要和K1一致(这里是string) var dict2 = new Dictionary<string, int>(); foreach (var kv in dict1) { var k1 = kv.Key.K1; if (dict2.ContainsKey(k1)) { // K1已存在,累加对应的值 dict2[k1] += kv.Value; } else { // K1不存在,添加新的键值对 dict2[k1] = kv.Value; } }
两种方法都能得到你想要的结果,选哪种全看你的习惯~
内容的提问来源于stack exchange,提问作者span
相关产品推荐
相关产品推荐

