You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:30:55