![見出し画像](https://assets.st-note.com/production/uploads/images/37743188/rectangle_large_type_2_e55bc458fb5816554b15a6303ee533bd.png?width=1200)
【Dart】ListのForEachメソッドでindexを取得する方法2選 -Dart Programming-
はじめに
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()の方がシンプルで使い勝手がいいかと思います。
この記事が気に入ったらサポートをしてみませんか?