web-dev-qa-db-ja.com

Dartでリストをマップに変換する方法

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()ですが、期待どおりに動作していません。リストインデックスをキーとして使用しています。私の質問:

  • Dartライブラリでこれを行うことについて何か知っていますか?
  • そうでない場合、そのような機能をコア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.

よろしくお願いいたします。

ニコラ

29
Nico

そのような方法はなく、そのような機能を追加する計画はないと思います。これを重要と考える場合は、 問題を提出 できます。

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}
}
7

Dart 1.1では、マップの このコンストラクタ を使用できます。

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

これは元の提案に最も近いものです。

49
simonpai

Dartにはタプルまたはペアの概念はまだありません(2つの要素Iterable以外)。 Dartがそのような概念を持っていた場合、 issue 7088 はMap.fromPairsコンストラクターでこれを解決することを提案します。

0
Sean Eagan

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

0
Michael Berger