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などの表計算ソフトの画面を思い浮かべるとわかりやすいかもしれません。
しかし、ここに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となります。
この連載の記事
- 第100回 SceneKitの物理現象シミュレーションとアニメーションをARKitに持ち込む
- 第99回 「物理学体」と「物理学場」を設定して物理現象をシミュレーション
- 第98回 SceneKitのノードに動きを加えるプログラム
- 第97回 いろいろな形のノードをシーンの中に配置する
- 第96回 SceneKitの基礎シーンビュー、シーン、ノードを理解する
- 第95回 現実世界の床にボールや自動車のモデルを配置する
- 第94回 ARKitを使って非現実世界との融合に備える
- 第93回 ARKitが使えるiPadを識別するプログラム
- 第92回 Swift Playgrounds 2.1での問題点をまとめて解消する
- 第91回 iPadの内蔵カメラで撮影した写真を認識するプログラム
- この連載の一覧へ