如何在Dart中向Map添加新对?

ame*_*nbo 4 dart flutter

将新对添加到地图时,我捕获了以下错误。

  • Variables must be declared using the keywords const, final, var, or a type name
  • Expected to find ;
  • the name someMap is already defined

我执行了以下代码。

Map<String, int> someMap = {
  "a": 1,
  "b": 2,
};

someMap["c"] = 3;
Run Code Online (Sandbox Code Playgroud)

我应该如何在地图上添加一对新货币对?

我也想知道如何使用Map.update

Sur*_*gch 28

您可以通过指定这样的新键来向 Dart 中的 Map 添加新对:

Map<String, int> map = {
  'a': 1,
  'b': 2,
};

map['c'] = 3;  // {a: 1, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)

根据评论,它对 OP 不起作用的原因是这需要在方法内部完成,而不是在顶层完成。


Abd*_*dir 15

Map<String, dynamic> someMap = {
  'id' : 10,
  'name' : 'Test Name'
};
someMethod(){
  someMap.addAll({
    'email' : 'test@gmail.com'
  });
}
printMap(){
  print(someMap);
}
Run Code Online (Sandbox Code Playgroud)

确保您无法在声明的正下方添加条目。


Par*_*iya 11

有两种方法可以向 Map 添加项目(键值对):

1.使用方括号 []

2.调用putIfAbsent()方法

Map map = {1: 'one', 2: 'two'};

map[3] = 'three';
print(map);

var threeValue = map.putIfAbsent(3, () => 'THREE');
print(map);
print(threeValue); // the value associated to key, if there is one

map.putIfAbsent(4, () => 'four');
print(map)
Run Code Online (Sandbox Code Playgroud)

; 输出:

{1: one, 2: two, 3: three}
{1: one, 2: two, 3: three}
three
{1: one, 2: two, 3: three, 4: four}
Run Code Online (Sandbox Code Playgroud)

您可以使用该addAll()方法将另一个 Map 的所有键/值对添加到当前 Map 。

Map map = {1: 'one', 2: 'two'};
map.addAll({3: 'three', 4: 'four', 5: 'five'});
print(map);
Run Code Online (Sandbox Code Playgroud)

输出:

{1: one, 2: two, 3: three, 4: four, 5: five}
Run Code Online (Sandbox Code Playgroud)


Bad*_*chi 9

这种方式也适用:

Map<String, int> someMap = {
  "a": 1,
  "b": 2,
};
someMap.addEntries({"c":3}.entries);
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ler 7

要在Flutter中声明地图,您可能需要final

final Map<String, int> someMap = {
  "a": 1,
  "b": 2,
};
Run Code Online (Sandbox Code Playgroud)

然后,您的更新应该可以正常工作:

someMap["c"] = 3;
Run Code Online (Sandbox Code Playgroud)

最后,该update函数具有两个需要传递的参数,第一个是键,第二个是本身被赋予一个参数(现有值)的函数。例:

someMap.update("a", (value) => value + 100);
Run Code Online (Sandbox Code Playgroud)

如果在所有这些之后打印地图,您将获得:

{a: 101, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)


Rop*_*shi 5

将新键/值作为映射添加到现有映射的另一种方法是:

oldMap.addEntries(myMap.entries);
Run Code Online (Sandbox Code Playgroud)

这将更新;oldMap的键/值myMap