見出し画像

【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;
 }
}

結果画面

上記の例だとこのような結果になると思います。

スクリーンショット 2020-10-30 14.17.14

まとめ

用途に応じてどちらを使用しても良いと思います。個人的にはasMap()の方がシンプルで使い勝手がいいかと思います。





この記事が気に入ったらサポートをしてみませんか?