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

Dart中按出生日期分组后正确计算每组活动总价格的实现方法

Dart中按出生日期分组后正确计算每组活动总价格的实现方法

嗨,我看你已经搞定了按出生日期分组的逻辑,但计算每组活动总价格时踩了个小坑——用全局变量total累加会把所有组的价格混在一起,导致结果不符合预期。别担心,只需要调整一下每组总价的计算方式,让每个分组单独统计自己的价格总和就可以解决啦!

问题分析

你原来的代码里用了全局的double total = 0;,然后在map里执行total+=l.first["PriceOfEvent"],这会让total一直累加所有组的价格,而不是每个分组单独计算。比如第一组的总价本该是35000+20000=55000,但第二组的总价会变成55000+22000=77000,这显然不是你想要的结果。

修正后的完整代码

我们可以直接对每个分组的列表使用fold方法,单独计算该组的PriceOfEvent总和,完全不需要全局变量:

import 'dart:convert';

void main() {
  final data = [
    {
      "FullName": "Harry Potter",
      "DateOfBirth": "2020/02/16",
      "Department": "Branch Operation",
      "BirthDay": "Friday",
      "PriceOfEvent": 35000,
    },
    {
      "FullName": "John Wick",
      "DateOfBirth": "2020/02/16",
      "Department": "Finance",
      "BirthDay": "Friday",
      "PriceOfEvent": 20000,
    },
    {
      "FullName": "Solomon Kane",
      "DateOfBirth": "2020/02/19",
      "Department": "Loan",
      "BirthDay": "Monday",
      "PriceOfEvent": 22000,
    }
  ];

  final value = data.fold(<String, List<dynamic>>{}, (Map<String, List<dynamic>> a, b) {
    a.putIfAbsent(b['DateOfBirth'].toString(), () => []).add(b);
    return a;
  }).values
      .where((l) => l.isNotEmpty)
      .map((l) => {
            'DateOfBirth': l.first['DateOfBirth'],
            'BirthDay': l.first['BirthDay'],
            // 核心修改:对当前分组的所有item单独累加价格
            "TotalEventPrice": l.fold(0, (sum, item) => sum + item["PriceOfEvent"]),
            'Data': l.map((e) => {
                  'Department': e['Department'],
                  'FullName': e['FullName'],
                }).toList()
          }).toList();

  print(json.encode(value));
}

关键修改说明

  • 移除了全局的double total = 0;变量,彻底避免跨分组的错误累加
  • 在每个分组的map转换中,用l.fold(0, (sum, item) => sum + item["PriceOfEvent"])计算当前组的总价:
    • fold的初始值设为0,代表总和的起点
    • 每次迭代把当前item的PriceOfEvent加到sum上,最终得到该组的独立总价

运行结果验证

执行这段代码后,输出的JSON完全符合你的预期:

[
  {
    "DateOfBirth": "2020/02/16",
    "BirthDay": "Friday",
    "TotalEventPrice": 55000,
    "Data": [
      {
        "Department": "Branch Operation",
        "FullName": "Harry Potter"
      },
      {
        "Department": "Finance",
        "FullName": "John Wick"
      }
    ]
  },
  {
    "DateOfBirth": "2020/02/19",
    "BirthDay": "Monday",
    "TotalEventPrice": 22000,
    "Data": [
      {
        "Department": "Loan",
        "FullName": "Solomon Kane"
      }
    ]
  }
]

这样就完美实现了按出生日期分组,同时正确计算每组活动总价格的需求啦!

备注:内容来源于stack exchange,提问作者Deepak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:04:33