Flutter中如何对列表内相同月份的数值进行求和
实现按月份求和的方案
核心思路:把日期按「年-月」作为唯一标识分组,再对同组的Valor值累加即可得到对应月份的总和。
具体实现步骤
- 在你筛选
dataValues的循环结束位置,新增分组求和逻辑 - 定义存储月度总和的Map,key为「年份-月份缩写」,value为对应月份的总和
- 遍历所有符合条件的Data对象,拆分日期字符串得到月份标识,累加对应Valor值
修改后的完整代码示例
getData() async { _database.child("Dados").onValue.listen((event) { dataValues.clear(); temporaryDataValues.clear(); finalDataValues.clear(); // 新增:定义月度求和的Map Map<String, num> monthlySum = {}; var keys = event.snapshot.value.keys; var values = event.snapshot.value; for (var key in keys) { Data data = new Data( values[key]["Valor"], values[key]["Date"], values[key]["IndicadorRef"], ); if (data.indicadorRef == AreaScreen.indicadores[AreaScreen.indicadorIndex].name) { print(data.toJson().toString()); dataValues.add(data); temporaryDataValues.add(data.valor); // 新增:处理月度累加逻辑 List<String> dateParts = data.date.split('-'); // 拼接得到年月唯一标识,比如2021-Aug String monthKey = "${dateParts[0]}-${dateParts[1]}"; // 累加Valor,若Valor是字符串类型需要先转数值,替换为int.parse(data.valor)即可 if(monthlySum.containsKey(monthKey)){ monthlySum[monthKey] = monthlySum[monthKey]! + data.valor; } else { monthlySum[monthKey] = data.valor; } } } // 测试输出示例:你提供的样例中2021年8月总和为23+43=66 print("2021年8月总和:${monthlySum["2021-Aug"]}"); // 后续可直接使用monthlySum对象供界面渲染使用 }); }
注意事项
- 如果需要统计所有年份同一个月的总和,直接把
monthKey改成dateParts[1]即可,所有年份的8月都会累加到Aug这个key下 - 你示例中的月份是葡萄牙语缩写(Abr对应4月、Mai对应5月、Set对应9月等),无需额外适配,代码会直接按原字符串正确分组
- 若后续需要按升/降序输出各月份的总和,可直接对
monthlySum的key排序后遍历取值即可
内容的提问来源于stack exchange,提问作者Rafael Vitorino
相关产品推荐
相关产品推荐

