78

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

  • 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;

我应该如何向地图添加新的配对?

我也想知道怎么用Map.update

4

6 回答 6

134

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

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

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

someMap["c"] = 3;

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

someMap.update("a", (value) => value + 100);

如果你在所有这些之后打印地图,你会得到:

{a: 101, b: 2, c: 3}
于 2018-12-24T01:55:59.233 回答
36

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

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

map['c'] = 3;  // {a: 1, b: 2, c: 3}

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

于 2019-04-20T02:25:21.357 回答
17

有两种方法可以将项目(键值对)添加到 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)

; 输出:

{1: one, 2: two, 3: three}
{1: one, 2: two, 3: three}
three
{1: one, 2: two, 3: three, 4: four}

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

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

输出:

{1: one, 2: two, 3: three, 4: four, 5: five}
于 2020-11-07T05:11:16.013 回答
5
Map<String, dynamic> someMap = {
  'id' : 10,
  'name' : 'Test Name'
};
someMethod(){
  someMap.addAll({
    'email' : 'test@gmail.com'
  });
}
printMap(){
  print(someMap);
}

确保您不能在声明正下方添加条目。

于 2021-04-03T08:53:19.083 回答
3

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

oldMap.addEntries(myMap.entries);

这将使用;的oldMap键/值更新myMap

于 2020-10-17T12:56:08.507 回答
0

我写了这个实用程序:

Map updateMap({
  /// Update a map with another map
  /// Example:
  ///   Map map1 = {'name': 'Omid', }
  ///   Map map2 = {'family': 'Raha', }
  ///   Map map = updateMap(data:map1, update:map2);
  /// Result:
  ///   map = {'name': 'Omid', 'family': 'Raha',}
  @required Map data,
  @required Map update,
}) {
  if (update == null) return data;
  update.forEach((key, value) {
    data[key] = value;
  });
  return data;
}

例子:

Map map1 = {'name': 'Omid', }
Map map2 = {'family': 'Raha', }

Map map = updateMap(data:map1, update:map2);

print(map);

{'name': 'Omid', 'family': 'Raha',}
于 2021-05-09T19:29:15.923 回答