我喜欢.map((item){/*mapper*/})
类上的Iterable
,但Map
类似乎没有实现类似的方法。当我想要执行以下操作时,我必须创建一个空白实例,然后forEach
覆盖现有Map
我希望map
到新实例类型:
void noSuchMethod(Invocation inv){
if(inv.isMethod){
var namedArguments = new Map<String, dynamic>();
inv.namedArguments.forEach((k, v){
namedArguments[MirrorSystem.getName(k)] = v;
});
return;
}
super.noSuchMethod(inv);
}
是否有更好的方法来映射Map
?似乎有点奇怪的是forEach((v){})
Iterable
forEach((k, v){})
Map
map((k, v){})
Map
而{{1}} {{1}} {{1}}
答案 0 :(得分:3)
这应该做你想要的:
Map m = {'1': 1, '2':2 };
var newMap = new Map.fromIterable(m.keys, key: (k) => k , value: (v) => m[v] * 5 );
答案 1 :(得分:3)
从 Dart SDK 2.2.1 开始,您可以使用 collection for 语法。这适用于地图以及 lists (docs)。
示例:
Map m = {'1': 1, '2':2 };
final newMap = {
for (var k in m.keys)
'${k}': m[k] * 5,
};
答案 2 :(得分:2)
仅供参考
现在您可以使用 Map 类的每个实例中的特殊方法。
final dict = { "id": 1, "name": "Alex", "isAdmin": true };
// A simple map, that contains a user's info
dict.map((key, value) => MapEntry(key, value.toString()));
// Here we can transform the key and the value of this map
print(dict);
// { "id": "1", "name": "Alex", "isAdmin": "true" }
// All fields are strings now