## はじめに
以前に、「プログラミングで重要なのはデータ構造とアルゴリズムである。(受け売り)」と述べたが、配列とはそのデータ構造の一つである。
プログラミングをする時、自分にあったデータ構造を知っていると、作業効率を大きく上げることができる。
## 配列という考え方
プログラミングをしていると、同じような種類の変数をたくさん扱うことがある。
例えばインベーダーゲームを作るとすると、同じような敵がたくさんでてくるので、そのそれぞれの座標を管理する変数が必要になる。ここで、
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];
である。
ちなみに、繰り返しと組み合わせるときは繰り返しのなかでさらに繰り返しをする「二重繰り返し」が使われる。
## 終わりに
僕がプログラミングをやっていて初めて壁にぶつかったのは、この配列のところである。
人によっては簡単に理解できるのかもしれないが、僕には扱いづらそうに見えてなかなか実践することができなかった。
「はじめに」で述べた通りデータ構造の適切な利用はプログラミングをスマートにしてくれる。実際にプログラミングしてみることで配列の頼もしさを実感してほしい。
##
コメント