Dart 中使用 ifAbsent 的 Map Update 方法

Posted

技术标签:

【中文标题】Dart 中使用 ifAbsent 的 Map Update 方法【英文标题】:Map Update method with ifAbsent in Dart 【发布时间】:2019-11-24 00:00:23 【问题描述】:

我想修改地图中的现有项目,例如用新的键替换现有键的值,如果该键在地图中不存在,则添加一个子句,以简单地创建一个新的键值对。 Dart 文档为此目的建议了更新方法,但我不太确定如何使用可选的 ifAbsent() 参数来实现它,我假设如果要更新的密钥不存在,则调用该代码行.

V update(K key, V update(V value), V ifAbsent());

根据文档,有一个可选参数要取,但它显示错误,说参数太多,预期有 2 个,但找到了 3 个。

这显示没有错误(尚未测试,但理论上应该可以工作):

userData.update(key, value);

这(添加了 create if not exist 子句)可以:

userData.update(key, value,
  userData[key] = value;
  );

非常感谢任何帮助获得后者或同等工作的帮助!我想我在这里遗漏了一些相当明显的东西......

【问题讨论】:

这可能是一种不好的做法,但是您不能简单地使用括号表示法添加键值对而不是确定该值是否存在?示例:yourMap['key'] = 'value';?看看这个link的第9部分@ 【参考方案1】:

这是一个命名参数,你可以这样使用它:

userData.update(
  key, 
  // You can ignore the incoming parameter if you want to always update the value even if it is already in the map
  (existingValue) => value, 
  ifAbsent: () => value,
);

【讨论】:

如何用多个键和值做同样的事情?请建议。谢谢。 @Kamlesh 使用 for 循环 ;)【参考方案2】:

更新给定键的值。

user["age"] = 25;
user.update("age", (dynamic val) => ++val); // => 26

这也会返回新值。为了防止在 key 不存在时引发错误,还有第三个参数:

user.update("name", (dynamic val) => "Jim", ifAbsent: () => "Jane");
print(user); // => "age": 26, "name": "Jane";

在大多数情况下,您可以使用数组括号表示法进行更新:

user["name"] = "Mary";

【讨论】:

如何用多个键和值做同样的事情?请建议。谢谢。

以上是关于Dart 中使用 ifAbsent 的 Map Update 方法的主要内容,如果未能解决你的问题,请参考以下文章

Dart:映射列表(list.map)

如何在 dart 的地图中使用和存储列表?

dart空安全,Map中值如何累加

dart空安全,Map中值如何累加

dart空安全,Map中值如何累加

在 dart 中访问 Map 元素