foreach文で配列の中身を1つずつ取り出す
C#で配列を使っていると、「中に入っている値を1つずつ取り出して処理したい」という場面がよくあります。
今回は、5人分の点数を入れた配列から点数を順番に取り出し、合計点と平均点を求めます。初めてforeach文を見る方にも分かるように、コードの動きを一つずつ確認していきます。

今回のコード
var scores = new int[] { 65, 54, 78, 96, 81 };
var total = 0;
foreach (var score in scores)
{
total += score;
}
var average = (double)total / scores.Length;
Console.WriteLine("平均点: {0}", average);
実行結果
平均点: 74.8
foreach文とは
foreach文は、配列やリストの中身を先頭から1つずつ取り出して処理するための文です。
foreach (var score in scores)
{
total += score;
}
foreach (var score in scores)は、日本語にすると「scoresの中から値を1つずつ取り出し、その値をscoreという名前で使う」と読めます。
今回のscoresには5つの点数が入っているため、scoreの値は次のように変わります。
1回目: score = 65
2回目: score = 54
3回目: score = 78
4回目: score = 96
5回目: score = 81
pではなくscoreが分かりやすい理由
変数名をpにしてもプログラムは動きます。しかし、pだけでは「何が入っている変数なのか」が読み手に伝わりにくくなります。
foreach (var p in scores)
今回、取り出している値は1つの点数です。そのため、scoreという名前にすると役割がすぐに分かります。
scores: 複数の点数が入った配列score: 配列から取り出した1つの点数
複数の値には複数形、1つの値には単数形を使うと、コードを自然に読めるようになります。
total += score の意味
次の書き方は、totalにscoreの値を足し、その結果をもう一度totalに入れるという意味です。
total += score;
これは、次のコードを短く書いたものです。
total = total + score;
totalは最初に0です。そこへ65、54、78、96、81を順番に足すため、最後は374になります。
0 + 65 = 65
65 + 54 = 119
119 + 78 = 197
197 + 96 = 293
293 + 81 = 374
scores.Length の意味
Lengthは、配列に入っている要素の数を表します。
scores.Length
今回のscoresには5つの点数が入っているので、scores.Lengthは5です。平均は「合計 ÷ 個数」で求められるため、配列の要素数を使って計算しています。
(double)total の意味
totalとscores.Lengthは、どちらも整数です。C#では整数同士を割ると、小数部分が切り捨てられます。
var average = (double)total / scores.Length;
(double)totalは、totalを小数を扱えるdouble型として計算する、という意味です。これにより、374 ÷ 5の結果を74ではなく74.8として求められます。
for文との違い
同じ合計処理はfor文でも書けます。
var total = 0;
for (var i = 0; i < scores.Length; i++)
{
total += scores[i];
}
for文では、iを使って「配列の何番目か」を指定します。一方、foreach文は値そのものを順番に取り出すため、番号を管理する必要がありません。
for文: 何番目の要素かを使いたいとき、逆順に処理したいとき、特定の範囲だけ処理したいときに便利foreach文: 配列のすべての要素を先頭から順番に処理したいときに便利
foreach文が向いている場面
foreach文は、次のような処理に向いています。
- 配列に入っている数値を合計する
- 名前の一覧を1人ずつ表示する
- 商品の一覧から価格を1つずつ確認する
- リストのすべての要素に同じ処理を行う
「何番目か」よりも「中身を1つずつ使うこと」が大切な処理なら、まずforeach文を考えると読みやすく書けます。
まとめ
今回のコードでは、scoresから点数を1つずつscoreとして取り出し、totalに足して合計を求めました。そして、合計をscores.Lengthで割って平均を計算しました。
foreach文は、配列やリストの中身をすべて順番に処理するときに、短く分かりやすく書ける構文です。変数名もpではなくscoreのように中身が伝わる名前にすると、後から読み返したときにも理解しやすいコードになります。








ディスカッション
コメント一覧
まだ、コメントがありません