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

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

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

2016年10月03日 17時00分

 ここまでをPlaygroundで確認しておきましょう。思ったとおりの動作になっているでしょうか。

2次元配列は、縦横に要素が並んだものと考えても、「配列の配列」と考えてもいいでしょう

 ちなみに2次元の空の配列は、例えば整数の配列なら、

var ar20 = [[Int]]()

のようにして、[]を二重にして宣言することができます。まさに配列の中に配列が入っているイメージですね。

多重配列と多重のループ

 今見てきたように、2次元配列は、要素を縦横に並べたものと見ることもできますが、基本的な1次元の配列の各要素が、さらに配列になったものと考えることもできました。つまり配列の配列です。

 それでは3次元配列はどうでしょう。表計算ソフトで言えば、シートを使って2次元の表が複数積み重なったものを想像することもできるでしょう。

3次元の配列は、表計算ソフトの2次元のシートが複数積み重なったものと考えることもできます

 それにより、要素が平面ではなく、立体的に並んだ配列を連想できます。別のものに例えれば、複数階立ての駐車場ビルのようなものです。

 これも、プログラミングの観点からは「配列の配列の配列」と考えることで、比較的容易に、かつ機械的に記述できそうです。

var ar3 = [[[3, 6, 1], [2, 7, 9]], [[8, 11, 4], [15, 3, 5]], [[4, 13, 0], [5, 16, 14]]]

 これは、最も内側の配列は整数が3つ、その上は配列が2つ、いちばん外側は配列の配列が3つ並んだ配列となります。

 このような3次元の配列も、空の配列を宣言する際には、[]を三重にしていちばん内側に型を入れて書きます。

var ar30 = [[[Int]]]()

 これが意味するのは、配列の配列の配列です。ちなみに、この宣言方法からもわかるように、多次元配列も要素の型はすべて同じでなければなりません。

 ところで、このように、配列の中に配列が入り、さらにまたその中に配列が入っているような状態を、プログラミングの世界では「入れ子になっている」とか、「ネストしている」などと表現します。前回にループを使って配列の要素を取り出しましたが、2次元以上の配列の要素を取り出すには、やはりループも入れ子にすればいいのです。2次元配列のすべての要素を二重のループで取り出す例を示しましょう。

2次元配列は、配列が入れ子になったものなので、入れ子(二重)のループで内容にアクセスできます

 この程度なら、まだそれほど複雑ではありませんが、ややこしいことは確かです。自分でいろいろな例を作って、納得がいくまでPlaygroundで動かしてみてください。

次回の予定

 これまでは、変数も含めて、ほとんど数値を扱う例だけを取り上げてきました。コンピューターにとって数値はもちろん重要ですが、もう1つ、なくてはならない基本的な型があります。それは「文字列」です。文字列は、配列に似ていると言えば、意外に感じられるかもしれませんが、次回になれば、その理由を納得していただけるでしょう。

mobileASCII.jp TOPページへ

mobile ASCII

Access Rankingアクセスランキング