飞镖,一种更好的地图绘制方式?

时间:2014-03-16 09:51:52

标签: map dart

我喜欢.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}}

3 个答案:

答案 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