我正在寻找一种将List转换为Dart中的Map 的现成方法.
例如,在python中你可以这样做:
l= [ ('a',(1,2)), ('b',(2,3)), ('c',(3,4) ) ]
d=dict(l)
==> {'a': (1, 2), 'c': (3, 4), 'b': (2, 3)}
Run Code Online (Sandbox Code Playgroud)
dict函数需要一对夫妇的List.对于每对,第一个元素用作键,第二个元素用作数据.
在Dart中,我看到了List的以下方法:asMap(),但它并没有按照我的预期进行:它使用列表索引作为键.我的问题:
提案:
List.toMap() //same as python dict.
List.toMap( (value) => [ value[0], value[1] ] ) //Using anonymous function to return a key and a value from a list item.
Run Code Online (Sandbox Code Playgroud)
感谢致敬,
萨科
小智 53
在Dart 1.1中,您可以使用Map的这个构造函数:
new Map.fromIterable(list, key: (v) => v[0], value: (v) => v[1]);
Run Code Online (Sandbox Code Playgroud)
这最接近您原来的提案.
Kab*_*uda 15
有很多解决方案,但最简单的是:
1-使用asMap()功能
List list = ['steve', 'bill', 'musk'];
Map map = list.asMap();
print(map);
Run Code Online (Sandbox Code Playgroud)
输出 :
{0: steve, 1: bill, 2: musk}
Run Code Online (Sandbox Code Playgroud)
2-for-in在地图中使用集合 Map map = {};
List list = ['steve', 'bill', 'musk'];
Map map = {for (var item in list) '$item' : 'valueOf$item'};
print(map);
Run Code Online (Sandbox Code Playgroud)
输出 :
{steve: valueOfsteve, bill: valueOfbill, musk: valueOfmusk}
Run Code Online (Sandbox Code Playgroud)
希望它会有所帮助。
没有这样的方法,我认为没有任何计划添加这样的功能.如果您认为这很重要,可以提出问题.
该List.asMap文档:
返回不可修改的Map视图
__CODE__.它将此列表的索引作为键,将相应的元素作为值.
但是,你可以这样做:
var result = Map.fromIterable(l, key: (v) => v[0], value: (v) => v[1]);
Run Code Online (Sandbox Code Playgroud)
另一种可能性是使用Map.fromEntries()构造函数:
final result = Map.fromEntries(l.map((value) => MapEntry(value[0], value[1])));
Run Code Online (Sandbox Code Playgroud)