🎯

【Flutter / Dart】ListからMapへ変換し、そのMapを操作する方法

2022/04/09に公開

ListからMapへ変換する方法

List<int> data = [0, 2, 4, 6, 8, 10];
Map<int, int> mapData = data.asMap();
// {0: 10, 1: 8, 2: 6, 3: 4, 4: 2, 5: 0}

MapからIterable(繰り返し可能なオブジェクト)にしたMapEntryへ変換

Iterable<MapEntry<int, int>> mapEntryData = mapData.entries;
// (MapEntry(0: 0), MapEntry(1: 2), MapEntry(2: 4), ..., MapEntry(4: 8), MapEntry(5: 10))

MapEntryのメリット

MapEntryでは情報を.keyや.valueだけで取得できてわかりやすいコードになります

Iterable<MapEntry<int, int>> mapEntryData2 = mapEntryData.where((e) => (e.value != 2)).toList();
// [MapEntry(0: 0), MapEntry(2: 4), MapEntry(3: 6), MapEntry(4: 8), MapEntry(5: 10)]

使用例

グラフの点の配列を作成する際に使用することがあります

// y軸のデータ
List<int> data = [0, 2, 4, 6, 8, 10];
// asMapにすることで、keyに0, 1, 2, 3, 4, 5が入り、x軸のデータが作られる
// entriesにすることで繰り返し可能なオブジェクトとして、valueがnullでないもの以外を値とする
// そして、map()することでそれぞれの要素(e)を元に、グラフの点の配列を作成する
List<FlSpot> spots = data.asMap().entries.where((e) => e.value != null).map((e) => FlSpot(e.key.toDouble(), e.value!.toDouble())).toList();

Discussion