C#入門⑪ 配列 ── たくさんのデータを、まとめて持つ

前回まで、くり返し(for・while)をやってきました。

今回からは新しいテーマ。たくさんのデータをまとめて扱う配列(はいれつ)です。くり返しと組み合わさると、大きな力になります。

配列とは、同じ種類のデータを、まとめて入れられる箱です。

なぜ、まとめる必要があるのか

第2回で「変数は、データを入れる箱」とやりました。たとえば、3人のテストの点数を覚えるなら、こう書けます。

int score1 = 80;
int score2 = 95;
int score3 = 70;

3人ならいいですが、40人のクラスだったら? 変数を40個も用意するのは、現実的ではありません。

そこで使うのが、配列です。ひとつの名前で、たくさんのデータをまとめて持てます

料理でいうなら、仕切りのある弁当箱のようなもの。ひとつの箱の中に、いくつもの仕切りがあって、それぞれにおかずが入っている。そんなイメージです。

書き方を見てみる

3人の点数を、配列にまとめてみます。

int[] scores = { 80, 95, 70 };

int[](int の後ろに角カッコ)は、「整数を、まとめて入れる箱」という意味です。scores という名前の箱に、80・95・70 の3つが入りました。

中身を取り出すときは、番号(インデックス)を使います。

Console.WriteLine(scores[0]);   // 80
Console.WriteLine(scores[1]);   // 95
Console.WriteLine(scores[2]);   // 70

scores[0] は「scores の0番目」という意味です。

また「0から始まる」

ここで、第8回(for文)でも出てきた感覚が再登場します。

配列の番号は、0から始まります

scores[0] → 80   (1番目だけど、番号は0)
scores[1] → 95   (2番目だけど、番号は1)
scores[2] → 70   (3番目だけど、番号は2)

「1番目が0番」というのは、慣れるまで本当に不思議です。でも、for文のときと同じ「0から数え始める」ルール。プログラミングではこれが基本だと、ここでも出てきます。

くり返しと組み合わせる ── ここが本領

配列が本当に強いのは、くり返し(for文)と組み合わせたときです。

40人いても、こう書けば全員分を表示できます。

int[] scores = { 80, 95, 70 };

for (int i = 0; i < scores.Length; i++)
{
    Console.WriteLine(scores[i]);
}

実行すると、80・95・70 が順に表示されます。

ポイントは2つ。

  • scores[i] … カウンター i を番号に使うことで、0番、1番、2番…と順に取り出せる
  • scores.Length … 配列の中身の個数(ここでは3)

i が 0,1,2 と変わりながら、scores[0], scores[1], scores[2] を順に取り出している。for文のカウンターが、配列の番号とぴったり噛み合うんです。

これが、第8回で「カウンターをうまく使うのがコツ」と書いた理由です。配列とfor文は、セットで真価を発揮します。

つまずきポイント

初心者が必ず一度はやるのが、存在しない番号を指定することです。

int[] scores = { 80, 95, 70 };   // 0番〜2番まで(3個)
Console.WriteLine(scores[3]);     // 3番は無い!エラー

3個の配列なら、番号は 0・1・2 まで。3番は存在しません。なのに scores[3] と書くと、エラーになります。

「0から始まるから、最後の番号は『個数マイナス1』」。3個なら、最後は2番。この感覚に慣れるまでは、よく出るエラーです。出たら「番号、はみ出してないかな?」と疑ってみてください。

まとめ

配列は、同じ種類のデータをまとめて持つ箱。

int[] scores = { 80, 95, 70 };
Console.WriteLine(scores[0]);     // 番号で取り出す(0から始まる)
  • 番号(インデックス)は 0から始まる
  • .Length で個数が分かる
  • for文と組み合わせると、全部まとめて処理できる

次回は、配列によく似ているけれど、もっと柔軟な List(リスト) を紹介します。