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
相关产品推荐
相关产品推荐

