You need to enable JavaScript to run this app. 如何在Dart Map中使用reduce方法计算所有quantity字段的总和
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart Map中使用reduce方法计算所有quantity字段的总和

Dart 中基于 reduce 实现嵌套 Map 的 quantity 字段求和

核心实现逻辑

Dart 的 Map 本身没有内置 reduce 方法,reduce 是Iterable可迭代集合的专属方法,且有强制类型约束:reduce 的累计值类型必须和源集合的元素类型完全一致,无法直接在存嵌套对象的Map集合上跨类型计算数字总和。
完整实现分为三步:

  • 通过Map.values拿到所有嵌套条目组成的可迭代集合
  • 用.map()方法把每个嵌套条目映射为对应的quantity数值,生成纯数字的可迭代集合
  • 在纯数字集合上调用reduce逐次累加,得到最终总和

可直接运行的代码示例

// 定义题目给出的示例Map
final sampleMap = {
  'id2': {'quantity': 6, 'name': 'NEW NAME'},
  1484: {'quantity': 1, 'name': 'NEW NAME 404'},
  'id': {'quantity': 34, 'name': 'NEW NAME'},
};

// 使用reduce计算quantity总和
final totalQuantity = sampleMap.values
  .map((entry) => entry['quantity'] as int) // 提取每个条目的quantity值
  .reduce((sum, currentValue) => sum + currentValue); // 累加所有数值

// 输出结果为41,和预期一致
print(totalQuantity);

容易踩的实现坑

  • 禁止直接在sampleMap.values上调用reduce:这种写法会让reduce的初始累计值为第一个嵌套Map对象,类型和int不匹配,直接触发运行时报错,示例见下:

    错误写法

    // 类型不匹配:sum初始值是Map类型,无法直接和int做加法
    sampleMap.values.reduce((sum, entry) => sum + entry['quantity']);
    
  • 注意reduce的非空约束:如果传入的Map是空集合,没有任何条目,调用reduce会直接抛出StateError。如果业务场景下Map可能为空,需要提前做判空逻辑,再执行reduce计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 17:45:03