for 文と foreach 文の使い分けに関する技術資料
目次
概要
C# において、コレクション(配列やリストなど)の要素を繰り返し処理する方法としては主に以下の 2 つがあります。
for
文foreach
文
どちらも似たような処理を行うことができますが、それぞれ得意な場面や使い方が異なります。本資料では、配列を題材に、for
文と foreach
文の違いを解説しながら使い分けのポイントをまとめます。
for
文
特徴
- ループカウンタ(インデックス)を使って要素を参照する。
for (int i = 0; i < 配列の長さ; i++)
- 配列の要素数が変更された場合、ループ条件などのコード修正が必要になる。
- ループ中に「何番目の要素か」を把握しながら処理できる。
サンプルコード
string[] fruits = { "Apple", "Banana", "Cherry" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
int i = 0;
はループの開始位置。i < fruits.Length;
はループの継続条件。i++
はループのカウンタ(i)を毎回 1 増やす処理。
ループ中に fruits[i]
で要素にアクセスし、要素のインデックスを使った操作が可能です。
foreach
文
特徴
- 配列やリストなど、コレクションの要素を順番に取り出す。
- ループカウンタを意識する必要がない。
- 配列要素の追加や削除を行いたい場合、ループ中にコレクションを変更することは原則としてできない。
サンプルコード
string[] fruits = { "Apple", "Banana", "Cherry" };
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
foreach (型 変数名 in コレクション)
の構文で書く。fruit
という変数に配列の要素が順番に入り、要素数分だけ繰り返し実行される。
for
文と foreach
文の比較
項目 | for 文 | foreach 文 |
---|---|---|
特徴 | ループカウンタを用いて配列のインデックスを明示的に制御 | ループカウンタ不要で、コレクションの要素を順番に自動で取り出してくれる |
書き方 | for (int i = 0; i < 配列名.Length; i++) { ... } | foreach (型 変数名 in 配列名) { ... } |
可読性 | ループカウンタや条件式の管理が必要なので、少しコード量が多い | 配列要素の取り出し部分がシンプルで、可読性が高い |
適した用途 | – 特定のインデックスを操作したいとき – 何番目の要素か知りたいとき | – 配列やリストの要素を順番に処理するだけ – コレクションの要素数を気にせず一通り処理したいとき |
制限 | – ループ条件の設定ミスやカウンタの操作ミスでバグが発生しやすい | – ループ中にコレクションに要素を追加・削除する操作が制限される – 何番目の要素かを取得しづらい |
使い分けのポイント
- インデックスが必要か?
- 要素が「何番目」かを使って処理したい →
for
文 - とにかく要素をすべて順番に処理したい →
foreach
文
- 要素が「何番目」かを使って処理したい →
- コードのシンプルさを重視するか?
- 余分な変数(カウンタ)を使わず、スッキリ書きたい →
foreach
文 - 要素を任意の順番で参照したい(前後を飛び越えて取り出すなど) →
for
文
- 余分な変数(カウンタ)を使わず、スッキリ書きたい →
- コレクションの要素を変更するか?
- ループ中に配列の要素数を変更する必要がある →
for
文が向いている場合が多い - ループ中の要素の追加・削除を考慮しない →
foreach
文で問題ない場合が多い
- ループ中に配列の要素数を変更する必要がある →
まとめ
for
文 は「ループカウンタを使って要素を操作したい」ケースに向いている。foreach
文 は「要素を順番に取り出すだけでいい」ケースに向いており、コードがシンプルになりやすい。
初心者のうちは、要素の表示など、単純に「コレクションの中身をすべて処理する」場面で foreach
を積極的に使うと理解が深まります。一方、要素のインデックスを意識したり、前後の要素と比較したりといった用途では for
文が活躍します。
以上が for
文と foreach
文の使い分けに関する技術資料です。実際のコード上で適宜使い分けながら習得していきましょう。
ディスカッション
コメント一覧
まだ、コメントがありません