2013-05-30 44 views
2

我正在尋找一種現成的方式來將List轉換爲Dart中的地圖。如何將Dlist中的列表轉換爲地圖

在Python中,例如,你可以這樣做:

l= [ ('a',(1,2)), ('b',(2,3)), ('c',(3,4)) ] 
d=dict(l) 
==> {'a': (1, 2), 'c': (3, 4), 'b': (2, 3)} 

的字典功能預計夫婦的名單。對於每對,第一個元素用作鍵,第二個用作數據。

在Dart中,我看到下面的方法列表:asMap(),但它沒有做我期望的:它使用列表索引作爲關鍵。 我的問題:

  • 你知道Dart圖書館的任何事情嗎?
  • 如果沒有,是否有計劃在core lib中添加這樣的功能?

建議:

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. 

感謝和問候,

薩科

回答

2

有沒有這樣的方法,我不認爲有任何計劃,以增加這樣的功能。如果你認爲這很重要,你可以file an issue

List.asMap文檔:

返回this不可修改的地圖視圖。

它具有此列表的索引作爲鍵,並將相應的元素作爲值。

然而,你可以做你想做的是這樣的:

Map dict(List l) { 
    final m = {}; 
    l.forEach((e){ m[e[0]] = e[1]; }); 
    return m; 
} 

main(){ 
    print(dict([["a", "b"], ["c", "d"]])); // prints {a: b, c: d} 
} 
0

目前還沒有元組或對的鏢(比兩個元素的可迭代等)的概念。如果Dart有這樣的概念,issue 7088建議用Map.fromPairs構造函數來解決這個問題。

+0

+亞歷山大解決方案甚至基於2元素列表對我來說很好,它的工作。我爲自己使用它。 – Nico

8

在DART 1.1,你可以使用this constructor地圖:

new Map.fromIterable(list, key: (v) => v[0], value: (v) => v[1]); 

這將是最接近原始的提案。