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

