Dartでリストをマップに変換するon-the-shelf方法を探しています。
pythonたとえば、次のようにできます:
l= [ ('a',(1,2)), ('b',(2,3)), ('c',(3,4) ) ]
d=dict(l)
==> {'a': (1, 2), 'c': (3, 4), 'b': (2, 3)}
Dict関数はカップルのリストを期待します。カップルごとに、最初の要素がキーとして使用され、2番目の要素がデータとして使用されます。
Dartでリストの次のメソッドを確認しました: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.
よろしくお願いいたします。
ニコラ
そのような方法はなく、そのような機能を追加する計画はないと思います。これを重要と考える場合は、 問題を提出 できます。
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}
}
Dart 1.1では、マップの このコンストラクタ を使用できます。
new Map.fromIterable(list, key: (v) => v[0], value: (v) => v[1]);
これは元の提案に最も近いものです。
Dartにはタプルまたはペアの概念はまだありません(2つの要素Iterable以外)。 Dartがそのような概念を持っていた場合、 issue 7088 はMap.fromPairsコンストラクターでこれを解決することを提案します。
Dart 2.3以降、collection-forを使用してコレクションを構築することが可能です:
Map result = { for (var v in list) v.key: v.value };
ソース: https://www.woolha.com/tutorials/Dart-converting-list-to-map-examples