Dart リスト(配列)同士をIterableとして連結する

Dart リスト(配列)同士をIterableとして連結する

Dartで、リスト(配列)同士をIterableとして連結するコードを記述してます。「followedBy」を使用します。型の違うリスト同士に使用するとエラーが発生します。

環境

  • OS windows11 home
  • Dart 2.18.1

Iterableとして連結

Iterableとして連結するには「 followedBy 」を使用します。

リスト.followedBy(リスト)

※Iterableが返ります

実際に、使用して連結してみます。

void main() {
  var list1 = ['aaa', 'bbb'];
  var list2 = ['ccc', 'ddd'];

  var result = list1.followedBy(list2);

  print(result); // (aaa, bbb, ccc, ddd)

  print(result.runtimeType); // EfficientLengthFollowedByIterable<String>
}

実行結果を見ると、連結されていることが確認できます。

数値同士の場合は「Iterable<int>」が返ります。

void main() {
  var list1 = [11, 22];
  var list2 = [33, 44];

  var result = list1.followedBy(list2);

  print(result); // (11, 22, 33, 44)

  print(result.runtimeType); // EfficientLengthFollowedByIterable<int>

}

型の違うものに使用するとエラーが発生します。

void main() {
  var list1 = [11, 22];
  var list2 = ['aa', 'bb'];

  var result = list1.followedBy(list2);

  print(result);

  print(result.runtimeType);
}

main.dart:5:33: Error: The argument type 'List<String>' can't be assigned to the parameter type 'Iterable<int>'.
 - 'List' is from 'dart:core'.
 - 'Iterable' is from 'dart:core'.
  var result = list1.followedBy(list2);

3つ以上のリスト(配列)を連結させる場合は「followedBy」をチェーンメソッドで使用します。

void main() {
  var list1 = [11, 22];
  var list2 = [33, 44];
  var list3 = [55, 66];

  var result = list1.followedBy(list2).followedBy(list3);

  print(result); // [11, 22, 33, 44, 55, 66]
}

空のリスト(配列)

空のリスト(配列)同士に使用すると、空の「Iterable」が返ります。

void main() {
  var list1 = [];
  var list2 = [];

  var result = list1.followedBy(list2);

  print(result); // ()

  print(result.runtimeType); // EfficientLengthFollowedByIterable<dynamic>
}

リスト(配列)に変換

リスト(配列)に変換する場合は「toList()」でリストに変換します。

void main() {
  var list1 = [11, 22];
  var list2 = [33, 44];

  var result = list1.followedBy(list2);

  print(result.toList()); // [11, 22, 33, 44]

  print(result.toList().runtimeType); // List<int>
}