C#のお話です。
以下のようなコレクションitemsの各要素にたいして処理を行なう際に、処理内でインデックスが必要な場合はどのようなコードにするのが良いかについて。
var items = new[] { "a", "b", "c" };
レガシーな書き方だと以下です。
いまどきfor文でループしたくないですよね。
for(int index = 0; index < items.Length; index++) {
var item = items[index];
//indexとitemを使用する処理
}
foreachだと以下です。
forよりはマシですが、itemsからインデクサを使用して要素を取得するところが残念です。
foreach(var index in Enumerable.Range(0, items.Length)) {
var item = items[index];
//indexとitemを使用する処理
}
インフォテックの社内ライブラリを使用する場合、IListの拡張メソッドForEachが実装してあるので、以下のように実装できます。
items.ForEach((index, item) => {
//indexとitemを使用する処理
});
上記の方法でだいたいは問題ないのですが、処理をラムダ式で実装出来なかったり、出来ても複雑になってしまう場合、インフォテックの社内ライブラリにIListの拡張メソッドAndIndexが実装してあるので、以下のように実装できます。
foreach (var (item, index) in items.AndIndex()) {
//indexとitemを使用する処理
}
追加した拡張メソッドはとても単純な実装内容ですが、たったそれだけでコードが非常に分かりやすくなっていると思います。