配列 基礎編第17回


20140218

変数はデータを格納する容器であり、一度に1つのデータしか格納できないことは変数の回で説明しました。複数のデータを扱う場合にはその分だけ変数を用意しなければなりません。数個のデータならともかく、多数のデータ(例えばクラス全員のテスト成績)があると、それだけの変数を扱うのは困難になります。このように複数のデータをまとめて取り扱うことができるのが「配列(array)」です。

配列とは

同じ型のデータを1つにまとめて取り扱う変数です。例えばクラスの生徒30人分のテスト結果を使って平均点などを計算したいとします。30人分の点数を取り扱う変数を宣言し値を代入するプログラムコードは次のようになります。

int student1, student2, student3,…, student30;
student1 = 70;
student2 = 74;
student3 = 56;

student30 = 82;

合計点を計算するには、

totalScore = student1 + student2 + student3 +… student30

となります。このように100人なら100個、1000人なら1000個と同じ種類の変数を大量に扱うのは、効率が悪く間違いやすくもなります。とても実用的とは言えません。このような場合に「配列」を使用します。

配列の書式

配列は次のような書式で宣言されます。

データ型 配列名[添え字]

Javaの場合、次のように宣言するのが一般的です。

データ型[] 配列名

添え字とは、インデックス(index)とも呼ばれ、要素の数を示します。上の例で、配列を宣言すると次のようになります。

int student[29];

これで30個分の整数型データを格納できるstudentという名前の配列が定義されます。なぜ「29」で「30」個分になるかというと、添え字は0から始まるためです。n個分のデータを格納する場合、添え字にはn-1を指定します。この変数に値を代入するには、次のように添え字を変化させます。

student[0] = 70;
student[1] = 74;
student[2] = 56;

student[30] = 82;

この配列を表で表すと、次のようになります。

0 1 2 30
70 74 56 82

1行目は添え字、2行目は値です。値と書きましたが、配列の場合は格納されたデータ/値を「要素(element)」と呼びます。

この配列を使って合計点を計算するには、以前に説明したループ文を使用します。while文でも可能ですが、ここではfor文を使って説明します(C++での例)。

1行目:合計点を格納する変数を定義し初期化
2行目:iの初期値を0、30になるまでループ、iの増分を1に設定。
4行目:totalScoreにstudent[i]の点数を加える

これで30人分の合計点を得ることができます。

このように添え字を変えることで、それに該当する配列に格納された要素を扱えるようになります。

変数は一個の容器でしたが、配列は一つの大きな容器を仕切りで区切ったものとみなすことができます。student1、student2という容器を用意するのではなく、studentという大きな容器を用意し、それを区切って添え字を割り当てます。これで何人分のデータがあっても上記のコード例のようにシンプルに処理することができます。

多次元配列

ここまで説明してきた配列は一次元配列というものです。同じ例で説明すると、student[i]は生徒のテストの点数だけを格納する配列で、生徒一人につき1つの点数しか格納できません。2回目のテストの点数、3回目の点数と複数の点数を格納するには「多次元配列」を使用します。これを表で示すと次のようになります。

  0 1 2 30
1回目(0) 70 74 56   82
2回目(1) 76 65 60   80
3回目(2) 72 70 62   75
4回目(3) 78 70 68   74
5回目(4) 80 72 78   64

表の場合はこのように列を生徒、行をテストの回にして、生徒一人に複数の点数を割り当てることができます。配列を使ってこれを表すには次のように添え字を増やします。

データ型 配列名[添え字1] [添え字2]

これは二次元配列と呼ばれます。生徒30人分の5回分の点数を扱うには次のようにします。

int student[29] [4];

生徒2の3回目の点数「65」は

student[1] [2]

に格納されます。

この配列を利用すると、回別の集計や各生徒の平均点など、さまざまな計算を効率的に実行できるようになります。

このように添え字を増やすことでに三次元、四次元の配列を作ることができます。三次元配列は三次元のグラフ(X軸、Y軸、Z軸)をイメージすると分かりやすいのですが、それ以上の次元の配列は想像しにくいかと思います。

注意すべき点は、配列には同じ型の値しか格納できないことです。例えば、生徒の名前(文字列)と点数(整数)を一つの配列に格納することはできません。

for文を使って例を示したように、配列はループ文を使って処理されることが多く、ループを入れ子にして多次元配列を処理することもあります。データベースやファイルから取得したデータを格納する際にもよく使われます。

まとめ

配列を利用すると、同じ型の大量のデータをまとめて処理することができます。多次元配列により、複数の要素を処理できるようになります。データを効率よく扱うために、配列が使われることを理解してください。

次回は配列をもう一歩先に進めた「構造体」について説明する予定です。

では、また。

コメントしてみる