如何在 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
【讨论】:
感谢您的回复,但它不起作用,出现同样的错误。 我在Widget
的build
函数中测试了完全相同的代码,您将不得不在您的问题中添加更多信息。在这里阅读更多:***.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 添加新对?的主要内容,如果未能解决你的问题,请参考以下文章
如何正确覆盖一个类,以便在 Flutter [Dart] 中唯一地添加到地图中
flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中?