このページの本文へ

Swift Playgroundsで学ぶiOSプログラミング第8回

人間が考えつかない概念はコンピューターも実行できない

多次元の配列とループのネスティング

2016年10月03日 17時00分更新

文● 柴田文彦 編集●吉田ヒロ

  • この記事をはてなブックマークに追加
  • 本文印刷

 コンピューターは、人間をはるかに超えた演算能力を持っていますが、言うまでもなくコンピューターをプログラムするのは(今のところ)大部分は人間の仕事です。そのため、人間の頭ではまったく考えつかないような概念を、コンピューターによって処理させようと思っても無理があります。人間がまったく思いつかないようなことは、コンピューターに指示するプログラムとして用意することもできないからです。

 科学技術の最先端のような分野でなく、プログラミングの学習であっても事情は似たようなものです。そして、人間がその構造を把握できないようなデータを扱うこともできません。前回登場した配列が、初心者にはわかりにくいとすれば、それは頭の中に意味のあるデータを並べた配列を思い浮かべることができないからかもしれません。前回は添え字が1つだけ、つまり1次元の配列でした。それが2次元、3次元になったらどうでしょうか。3次元くらいまでは、なんとか頭の中で想像できそうですが、4次元以上になるととたんに難しくなりそうです。

2次元の配列の考え方と書き方

 前回登場した配列は、もっとも基本的な1次元のもので、要素が1列、あるいは1行に並んでいる状態に対応するものでした。ちょっとだけ復習すると、例えば、適当な整数の要素が4つ並んだ配列は、以下のように書いて定義できました。

var ar1 = [4, 7, 2, 9]

 この配列の中の要素を取り出すには、変数名の後ろに付けた[]の中に要素の番号(添え字、またはインデックス)を、次のようにして指定すればいいのでした。

ar1[3]

 これが2次元になったらどうなるのでしょうか。2次元と言うからには、要素が縦方向と横方向に並んでいるものを想像するでしょう。これはExcelやNumbersなどの表計算ソフトの画面を思い浮かべるとわかりやすいかもしれません。

2次元の配列は、ExcelやNumbersの表計算ソフトを思い浮かべるとわかりやすいでしょう

 しかし、ここに1つ問題があります、プログラムは1行ずつ書くことを基本としているため、表計算のようにマトリクス状に並んだもの、複数行にまたがるものを表現しにくいのです。2次元なら、改行しながら書けば、なんとか擬似的にマトリクスを表現できますが、3次元以上になったらどうでしょう。行や平面で表現するのは難しくなります。

 そこで、2次元以上の配列を考えるとき、ちょっと違った視点から見てみることにします。1次元の配列のときには、配列の1つ1つの要素は、単なる数値や、数値を表す変数でした。2次元配列は、配列の1つ1つの要素が配列になったもの、と考えるのです。例えば、上の例と同じように整数が4つ並んだ配列が、さらに2つ並んだ配列を定義してみましょう。

var ar2 = [[4, 7, 2, 9], [11, 5, 3, 8]]

 配列の要素はカンマ(,)で区切るという原則は変わらないので、2つの配列はカンマで区切ります。この配列の要素は、やはり配列名の後ろに付けた[]の中にインデックスを書くことで取り出すことが可能です。

ar2[1]

 これによって取り出されるのは配列です。ar2のインデックスが1(2番目)の要素なので、[11, 5, 3, 8]が出てきます。その配列の中からさらに要素を取り出すには、その後ろに続けてさらに[]で囲ったインデックスを付けて、

ar2[1][2]

のように書くことができます。最初に書くのが外側の配列のインデックスで、次に書くのが、それによって取り出された(元の配列では内側の)配列のインデックスというわけです。これで取り出されるのは、3となります。

この連載の記事

週間ランキングTOP5

ASCII倶楽部会員によく見られてる記事はコレだ!

ASCII倶楽部の新着記事

会員専用動画の紹介も!