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

Dart列表计算结果分散问题:如何将独立计算结果合并为单列表以实现求和

解决Flutter列表计算结果分散的问题

你的问题核心在于每次计算都生成了独立的单元素列表,而不是把所有计算结果收集到同一个列表中。另外原代码的嵌套写法不仅可读性差,还依赖循环索引i,容易引发逻辑问题。下面是分步的解决方案:

第一步:重构代码生成统一的总价列表

我们可以先把去重后的商品单独处理,再遍历计算每个商品的总价并收集到同一个列表里:

// 先获取购物车中去重后的商品列表
final uniqueCartItems = cart.toSet().toList();

// 生成包含所有商品总价的列表
List<int> amountCustom = uniqueCartItems.map((item) {
  // 计算当前商品在购物车中的重复数量
  final itemCount = cart.where((element) => element == item).length;
  // 返回该商品的总价:单价 × 数量
  return json.price * itemCount;
}).toList();

执行这段代码后,amountCustom就会变成你期望的[28,88,1365],此时直接用reduce求和就没问题了:

final totalSum = amountCustom.reduce((a, b) => a + b);
print(totalSum); // 输出 1481

第二步:优化(可选)—— 直接计算总和,无需中间列表

如果不需要保留每个商品的总价列表,我们可以用fold方法直接累加求和,这样更高效:

final totalSum = cart.toSet().fold(0, (currentSum, item) {
  final itemCount = cart.where((element) => element == item).length;
  return currentSum + (json.price * itemCount);
});
print(totalSum); // 同样输出 1481

为什么原代码会出问题?

原代码中,你每次都通过[ ... ]创建了一个只包含单个计算值的新列表,而且看起来是在循环中重复执行这段代码,所以每次输出一个独立的单元素列表。同时嵌套的写法让逻辑变得混乱,依赖索引i也增加了出错的风险。

内容的提问来源于stack exchange,提问作者Basudev Nayak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:27:29