[VB.net] for eachにindexが欲しい

大方の場合

For Each item in collection
  debug.print(item .xxx)
Next

で済むけど、何番目なのか知りたい時があるが、

Dim index As Integer=0
For Each item in collection
  debug.print($"{index}:{item .xxx}")   ' あ、indexを+1しないといけない
  index += 1  ’改造中に消えたり、ココを通らなくなるとメンドィ
Next

パッと見、ゴチャったコードになってしまう。

Enumerable.Select メソッドでcollectiomの各要素をindex付のテンポラリィなクラスに差替えられるので、
for each の in で使ってみると・・・

For Each entry In collection.Select(Function(item, index) New With {item, index})
    Debug.Print($"{entry.index}:{entry.item.xxx}")
Next

entryは collectionの要素であるitemとindexのプロパティを持ち、entry.indexには、0から始まる整数が、entry.itemにはcollectionの各要素が入る。

また、EnumerableにはSelectのほかにもDistinct、Where、OrderByやUnionまであるから、SQL風に書こうとすればできないこともないかもしれない。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA