【Dart】ListのForEachメソッドでindexを取得する方法2選 -Dart Programming-

#プログラミング#Flutter#dart#ハッチアウトスクール#Flutterstudy
はじめに
Dartでプログラミングしている時に、forEachメソッド内でindexを使用したい場面ってありませんか?本記事ではその解決策を2つ紹介していきたいと思います。
変数定義
List<String> list = ['A', 'B', 'C'];
asMap()を使用する
シンプルにasMap()メソッドを使用して、Mapに対するforEachを使用するとindexも取得できます。
list.asMap().forEach((int i, String value) {
print('Index: $i' + ' Value: $value');
});
Extensionを使用する
少し複雑になりますが、Extensionを使用してListのデータ型に対して新たなメソッドを定義できます。
extension IndexedMap<T, E> on List<T> {
List<E> indexedMap<E>(E Function(int index, T item) function) {
final list = <E>[];
asMap().forEach((index, element) {
list.add(function(index, element));
});
return list;
}
}
使用例
下記のようにlist.indexMap()と呼び出せるようになりました。
list.indexedMap((int i, String value) {
print('Index: $i' + ' Value: $value');
});
参考コード
void main() {
List<String> list = ['A', 'B', 'C'];
print('asMap()を使用して');
list.asMap().forEach((int i, String value) {
print('Index: $i' + ' Value: $value');
});
print('\n');
print('Extensionを使用して');
list.indexedMap((int i, String value) {
print('Index: $i' + ' Value: $value');
});
}
extension IndexedMap<T, E> on List<T> {
List<E> indexedMap<E>(E Function(int index, T item) function) {
final list = <E>[];
asMap().forEach((index, element) {
list.add(function(index, element));
});
return list;
}
}
結果画面
上記の例だとこのような結果になると思います。
まとめ
用途に応じてどちらを使用しても良いと思います。個人的にはasMap()の方がシンプルで使い勝手がいいかと思います。