Slackコミュニティに
無料で参加する
Flutterラボの
プレミアム会員になる
【Dart】ListのForEachメソッドでindexを取得する方法2選 -Dart Programming-
2020.10.30
はじめに
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()の方がシンプルで使い勝手がいいかと思います。
Flutterラボ
hatchoutschool
Flutter Daily
Flutterに関する記事を日々更新しています (223本) 

【Dart】Stringからint, double, DateTimeに変換する
2020.09.14

【Dart】【Flutter】List型(リスト)の使い方とよく使うメソッドまとめ
2020.09.18

【Dart】【Flutter】DateTime型についてのまとめ
2020.10.01

【Dart】Map型の使い方とよく使うメソッドまとめ
2020.09.13