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