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

Flutter中如何对Map已存在键的对应数值做累加操作

问题根因

你当前使用的putIfAbsent方法逻辑为:仅当指定键不存在于Map中时,才会执行回调插入新值;如果键已经存在,方法不会对原有值做任何修改,因此无法实现累加效果。

实现方式

你可以选择以下任意一种写法实现累加逻辑,注意你声明的dataMap值类型为double,赋值时需要匹配类型避免报错:

  • 写法1:手动判断键是否存在
final dataMap = <String, double>{};
json.forEach((myKey) {
  final targetKey = myKey["sigla"] as String;
  if (dataMap.containsKey(targetKey)) {
    // 键已存在:原有值基础上加1
    dataMap[targetKey] = dataMap[targetKey]! + 1;
  } else {
    // 键不存在:初始化值为1.0
    dataMap[targetKey] = 1.0;
  }
});

代码里的!是Dart空安全的非空断言,因为我们已经通过containsKey确认键存在,取值一定非空,不会抛出异常。

  • 写法2:使用update方法(更简洁)
    Map自带的update方法天然支持「存在则更新、不存在则初始化」的逻辑,不需要手写if判断:
final dataMap = <String, double>{};
json.forEach((myKey) {
  final targetKey = myKey["sigla"] as String;
  dataMap.update(
    targetKey,
    (existingVal) => existingVal + 1, // 键存在时的更新逻辑:原有值+1
    ifAbsent: () => 1.0, // 键不存在时的初始化逻辑
  );
});

两种写法运行效果完全一致,执行后如果某键原有值为2,累加后会得到你预期的3。

内容的提问来源于stack exchange,提问作者Luis Ribeiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:12:45