今回はデータの型で勉強した配列について、もう一歩進んだ二次元配列について説明したいと思います。
配列とは
配列とは何?という人。そういう人はまずプログラミングの基礎(変数とデータの型)の章で復習してきてください。変数とデータの型についての記事はこちら

二次元配列とは
二次元配列とは、配列を2つ並べたものです。通常の配列が1次元なので、線の世界(Xだけ)です。それに対して二次元配列は二次元なので面の世界(XとY)です。
つまり、配列の場合は以下のような表データを格納するのにつかわれます。
もしプロ小学校4年1組 期末テスト3教科の点数
名前 | 国語 | 算数 | 理科 |
山田 | 95 | 80 | 60 |
鈴木 | 55 | 95 | 75 |
田中 | 100 | 80 | 50 |
上記の表を点数を意味するtenという名前の二次元配列で表すと、それぞれのセルは次のように表現されます。
名前 | 国語 | 算数 | 理科 |
山田 | ten[0][0] | ten[0][1] | ten[0][2] |
鈴木 | ten[1][0] | ten[1][1] | ten[1][2] |
田中 | ten[2][0] | ten[2][1] | ten[2][2] |
これをイメージ化するとこんな感じです。
つまり1行の内容がまずは配列(1次元配列)で表現されて、それが更に別の配列の中に入ることで複数行の内容が表現されて二次化されています。ここまでわかりますか?
もっとイメージ化するとこうですね。
このような形で上記の点数の表が配列に格納されることになります。ここで、もし山田さんの国語の点数を取りたいときはten[0][0]をしているすると95という値がとれ、ten[0][2]とやると山田さんの理科の点数 60 の値がとれます。
多次元配列
さて、こういうことができるのであれば三次元配列もいけちゃいますよね。三次元ということは、線、面、に加えて立体。そう空間座標を表すのに使います。
それを配列としてイメージ化してみるとこうなんですが・・・こうなるとわけわかんない感じですよね。この三次元配列を先ほどと同じ例で表すならten[0][0][0] といった感じです。
この原理を使えば基本何次元でも表せます。そのため二次元配列以上のことを多次元配列とよぶことがあります。実際は三次元までぐらいしか使いませんので、この上記のイメージを頭にもっているぐらいで十分じゃないでしょうか、多次元についてイメージしたのがこちらです。このようにプログラミングをやっていくと、ほんと数学的な抽象概念を鍛えられます。プログラミングをやると理数系に強くなるというのも納得できます。
なお、理系っこの大好き雑誌Newtonによる宇宙には16次元まであるという理論を展開している人もいるそうな、ちょっとそんなプログラミングには出くわしたことがないのですが宇宙関係の研究職に進む人は四次元以上のプログラムをつくることがあるかもしれませんね。
ちなみに4次元はこんな感じじゃないかといわれています。空間に時間という概念が加わり時空という表現となる。いま居る場所は時間によっても定義され、過去と未来という時間座標が加わるタイムマシン的なものでしょうか、アインシュタイン博士の相対性理論によるとタイムマインの存在は否定されているみたいですけどね。三次元の世界に生きている我々は四次元以上の存在は理解できないので想像でしかないですけど、なんかワクワクしますよね。
まとめ
このように今回は二次元配列とその応用の多次元配列というものについて説明しました。ちなみにこの多次元配列については、残念ながら教育用プログラミング言語の代表格であるScratchでは採用されていません。Scratchでつかえるのは(一次元)配列までです。
そのため、このサイトの主である教育用プログラミングではちょっと早い概念かもしれませんが、チェスや将棋、RPGのマップ作成などをする場合にはいずれ、この二次元配列の概念を知らないと対応できないので、遅かれ早かれといったところでしょう。
なお、今回の例 もしプロ小学校4年1組の例では、点数のみを配列の中にいれましたが、データの作り方によっては1列目に名前が入っている場合もあります。そのような場合は名前も一緒に格納してやり、一番点数が高い人は誰?赤点の人は誰?という抽出プログラムを書くことも可能です。
こんなイメージですね。
さて、この二次元配列を使ってプログラムを書くと一気に難易度があがります。というのも行と列のデータを全てチェックするために反復(ループ)処理を2重に回す必要があるからです。ここで、慣れていないと頭が混乱します。そして、1列ずつ1行ずつ処理していくために変数をつかっていきます。この行と列の場所を示す変数とそれを使って反復(ループ処理)をさせる、さらには結果を入力する変数も用意するというところが難しいのですが・・・・
それは、また次回、二次元配列と反復処理について別途、記事を書きたいと思います。今回はここまで。
コメント