C#

【C#】foreachとforの使い分け

今回はC#のループ処理でforとforeachについて使い分け方のお話です。

foreachを使うべき場面

コレクション全要素を処理する

コレクションの中の全要素に対して処理したいならforeachを使うべきです。理由としてはforeachならインデックスを使わずに各要素にアクセスできるため、コードの可読性が高いからです。

以下にforeachを使った場合と、for文を使った場合のコードを載せています。↓

foreachの場合インデックスを使わず要素にアクセスできるのに対し、forの場合はインデックス指定して要素にアクセスする必要があります。

for文だとムダにコードも増えますし、インデックスアクセスで領域外にアクセスするリスクもあります。よって使うべきはforeachです。

処理速度が必要

forとforeachはどちらも同じループ文ですが、同じ処理を行う場合だと処理時間はforeachの方が少なくて済みます。以下のコードを見てください。↓

どちらもループ内で行っている処理は同じですが、foreachを使用した場合の方が処理速度が速いのが分かると思います。

for文がなぜ遅いかというと、プログラム実行時に配列のインデックス等のメモリチェック処理が行われるからです。foreachはインデックスが無いのでそのぶん速くなります。

forを使うべき場面

インデックスを使って条件分岐させる

for文を使うのはインデックスを使用して処理の条件分岐をさせたい場合です。

以下のプログラムはループ内で偶数の時のみ処理を行う際、foreachとfor文でどのような書き方の違いがあるかを表したものです。

for文の方はループカウントで使用しているインデックス(i)を条件判定で使用することで非常にシンプルなコードになっています。

それに対し、foreach文の方はインデックス用の変数としてindexを用意してループ内でカウントアップすることで代用しています。ムダに変数を用意しなければいけないため、可読性も落ちてしまうのが良くありません。

まとめ

条件判定などはせずに、ループ内で全要素に対して処理をする場合はforeach、ループのインデックスを使って各要素毎に条件判定をしたい場合はforを使うべきが結論です。