foreach文で配列の中身を1つずつ取り出す

広告

C#で配列を使っていると、「中に入っている値を1つずつ取り出して処理したい」という場面がよくあります。

今回は、5人分の点数を入れた配列から点数を順番に取り出し、合計点と平均点を求めます。初めてforeach文を見る方にも分かるように、コードの動きを一つずつ確認していきます。

配列 scores から点数を1つずつ取り出し、合計374と平均74.8を求める流れ

今回のコード

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 の意味

次の書き方は、totalscoreの値を足し、その結果をもう一度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 の意味

totalscores.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のように中身が伝わる名前にすると、後から読み返したときにも理解しやすいコードになります。

訪問数 31 回, 今日の訪問数 31回

広告

C#,foreach,初学者,配列

Posted by hidepon