当ブログは移転しました。

配列とは

はじめに

以前に、「プログラミングで重要なのはデータ構造とアルゴリズムである。(受け売り)」と述べたが、配列とはそのデータ構造の一つである。

プログラミングをする時、自分にあったデータ構造を知っていると、作業効率を大きく上げることができる。

 

配列という考え方

プログラミングをしていると、同じような種類の変数をたくさん扱うことがある。

例えばインベーダーゲームを作るとすると、同じような敵がたくさんでてくるので、そのそれぞれの座標を管理する変数が必要になる。ここで、

int teki1X;

int teki2X;

int teki3X;

などと記述していては(実際にはy座標も必要である)変数だけでもプログラムが長くなり見にくくなるばかりか、一つ一つの変数にあとで初期化や代入をすることを考えると、相当な労力を使うことになるだろう。

そこで、配列の出番である。

配列の宣言方法は言語によって異なるが、その本質てきな仕組みは変わらないのでここではProcessingによる一例を示したい。

・宣言

 変数 = new 型[要素の数];

例としては、

int x = new int[10];

これにより、int型の変数を10個まとめた配列が定義される。

代入方法は簡単で、

x[0] = 5;

これで0番目の変数xに5を代入することができる。

このように、宣言した後は変数の番号を指定して通常通りに扱うことができる。

ところで、配列を扱うにあたって一つ注意して欲しいことがある。それは、配列の番号についてだ。先ほどの例では10個の変数を用意したが、実際には0~9の10個の変数ができあがている。つまりこの場合では、x[10]は存在していないということである。

配列と繰り返し

さて、配列を宣言することで数行にわたって変数を宣言する手間は省けたが、代入となるとまだ大変である。例えば初期化をするだけでも

x[0] = 0;

x[1] = 0;

x[2] = 0;

という具合である。

これをより効率的にする方法として、繰り返しを利用することがある。

繰り返しといえばwhile文やfor文であるが、ここではfor文を例に解説してみたい。

既にint x =  new int[10];が宣言されているとする。

for (int i=0 ; i<10 ; i++ ) {
  x[i] = 0;
}
これにより、全ての要素に0を代入することができる。ちなみに、i<10では10を含んでいないので誤ってx[10]を指定してしまうことはない。

x[i] = 0; をx[i] = i*10; のように i を絡ませた式にすることで番号ごとに規則的な変化のつけた代入をすることも可能である。このようなテクニックはぜひ実践で身につけて欲しい。

★2次元配列

今まではいわば直線のような味方で1次元の配列を考えていたが、時に2次元の配列を考えることがある。例えば、n行m列に円を敷き詰めるときに「n行目のm列目」をそのまま指定するには2次元の配列であったほうが都合がいいだろう。

・宣言

型 変数 = new 型[要素の数][要素の数];

例としては、

float x[] = new float[100][100];

である。

ちなみに、繰り返しと組み合わせるときは繰り返しのなかでさらに繰り返しをする「二重繰り返し」が使われる。

 

終わりに

僕がプログラミングをやっていて初めて壁にぶつかったのは、この配列のところである。

人によっては簡単に理解できるのかもしれないが、僕には扱いづらそうに見えてなかなか実践することができなかった。

「はじめに」で述べた通りデータ構造の適切な利用はプログラミングをスマートにしてくれる。実際にプログラミングしてみることで配列の頼もしさを実感してほしい。