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

Posted

技术标签:

【中文标题】如何在 Dart 中向 Map 添加新对?【英文标题】:How to add a new pair to Map in Dart? 【发布时间】:2019-05-23 07:41:13 【问题描述】:

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

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

【问题讨论】:

这段代码在方法中吗?您不能在***范围内执行分配或其他代码 感谢您的评论。我不知道。它有效。 类型转换来的时候dart太弱了。 【参考方案1】:

要在 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

【讨论】:

感谢您的回复,但它不起作用,出现同样的错误。 我在Widgetbuild 函数中测试了完全相同的代码,您将不得不在您的问题中添加更多信息。在这里阅读更多:***.com/help/how-to-ask 谢谢。我解决了这个问题。错误的原因是我在***范围内执行了代码,正如@jonah-williams 在我的问题的 cmets 中所说的那样。【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

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

oldMap.addEntries(myMap.entries);

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:
Map<String, dynamic> someMap = 
  'id' : 10,
  'name' : 'Test Name'
;
someMethod()
  someMap.addAll(
    'email' : 'test@gmail.com'
  );

printMap()
  print(someMap);

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

【讨论】:

【参考方案6】:

我编写了这个实用程序:

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',

【讨论】:

以上是关于如何在 Dart 中向 Map 添加新对?的主要内容,如果未能解决你的问题,请参考以下文章

在飞镖中向int添加点

如何正确覆盖一个类,以便在 Flutter [Dart] 中唯一地添加到地图中

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

flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中?

在 Dart 中定义函数时,如何将参数的默认值设置为 ,即空 Map?

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