🗺️

mapメソッドについて

2024/11/24に公開

結論

各ListやMap型のキー・バリューなどに対して一つ一つの要素に処理を行って、新しいコレクションをイテラブルで返すメソッド。

使用例

リストのnumbersの各値に処理(今回は、1を足している)を行なっている。
mapメソッドの返り値は、イテラブルを返す。
Listを返すと勘違いしやすいので注意が必要。
Listで使いたいのであれば、.toListをつけてリストに変換してあげると良い。

void main() {
  List<int> numbers = [1, 2, 3, 4];

  var result = numbers.map((i) => i + 1).toList();
  // [2, 3, 4, 5]
  print(result);
}

イテラブル(Iterable)とは

値を順番に取り出せるデータの集まりを使うための抽象クラス。
→ ListやSetクラスの親クラス。

なぜイテラブル(Iterable)でMapメソッドは返すのか

  1. 遅延評価による効率的なデータ処理
    → 実際に要素を使うときだけ呼び出せる
void main() {
  var numbers = [1, 2, 3, 4, 5];

  // 遅延評価のIterableを作成
  var doubled = numbers.map((n) {
    print('Processing $n');
    return n * 2;
  });

  print('Before accessing elements');

  // 要素にアクセスしたときに初めて処理が実行される
  print(doubled.first); // 2
}
  1. 柔軟に型(List、set)を変えられる。
  2. 無駄にメモリを使わなくて良くなる。
    → Listやsetを返すとすべての要素を一度に計算してメモリに保存する必要がある。
    下記は100万のデータから五つのデータのみを抽出
void main() {
  var largeData = Iterable.generate(1000000, (index) => index); // 100万のデータを生成
  var evenNumbers = largeData.where((n) => n % 2 == 0); // 条件を適用

  print(evenNumbers.take(5).toList()); // [0, 2, 4, 6, 8] だけ処理
}

Discussion