for 文と foreach 文の使い分けに関する技術資料

概要

C# において、コレクション(配列やリストなど)の要素を繰り返し処理する方法としては主に以下の 2 つがあります。

  1. for
  2. 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 文の比較

項目forforeach
特徴ループカウンタを用いて配列のインデックスを明示的に制御ループカウンタ不要で、コレクションの要素を順番に自動で取り出してくれる
書き方for (int i = 0; i < 配列名.Length; i++) { ... }foreach (型 変数名 in 配列名) { ... }
可読性ループカウンタや条件式の管理が必要なので、少しコード量が多い配列要素の取り出し部分がシンプルで、可読性が高い
適した用途– 特定のインデックスを操作したいとき
– 何番目の要素か知りたいとき
– 配列やリストの要素を順番に処理するだけ
– コレクションの要素数を気にせず一通り処理したいとき
制限– ループ条件の設定ミスやカウンタの操作ミスでバグが発生しやすい– ループ中にコレクションに要素を追加・削除する操作が制限される
– 何番目の要素かを取得しづらい

使い分けのポイント

  1. インデックスが必要か?
    • 要素が「何番目」かを使って処理したい → for
    • とにかく要素をすべて順番に処理したい → foreach
  2. コードのシンプルさを重視するか?
    • 余分な変数(カウンタ)を使わず、スッキリ書きたい → foreach
    • 要素を任意の順番で参照したい(前後を飛び越えて取り出すなど) → for
  3. コレクションの要素を変更するか?
    • ループ中に配列の要素数を変更する必要がある → for 文が向いている場合が多い
    • ループ中の要素の追加・削除を考慮しない → foreach 文で問題ない場合が多い

まとめ

  • for は「ループカウンタを使って要素を操作したい」ケースに向いている。
  • foreach は「要素を順番に取り出すだけでいい」ケースに向いており、コードがシンプルになりやすい。

初心者のうちは、要素の表示など、単純に「コレクションの中身をすべて処理する」場面で foreach を積極的に使うと理解が深まります。一方、要素のインデックスを意識したり、前後の要素と比較したりといった用途では for 文が活躍します。


以上が for 文と foreach 文の使い分けに関する技術資料です。実際のコード上で適宜使い分けながら習得していきましょう。

C#,初学者,繰り返し

Posted by hidepon