改めて前回の内容をおさらいをしておくと、
- 配列には静的配列と動的配列がある
- 静的配列は扱える配列サイズが決まっていて、配列サイズを後から変えることはできない。
- 動的配列は扱える配列サイズが決まっていない配列で、配列サイズは後からArrayResize関数などで変えることができる。
ということをお伝えしました。
今回は多次元配列(multiple dimension array)というものについて解説していきたいと思います。
・・・とはいっても、この多次元配列についてはそれほど深掘りはしません。
なぜなら、EAを作るうえでは、この多次元配列が持つ役割のほとんどはこの後、講座記事で取り上げる予定の 構造体 というもので代用できるからです。
なので、あまりかしこまらずにリラックスして読んでいただきたいと思います。<m(__)m>
今回の記事を読んで勉強して頂くことによって、「配列にはこのような使い方もあるんだ!」という気付きを得られ、配列に対する基本的な理解がより深まるかと思います。
※MQL5で自動売買プログラム作るにあたっては、メタトレーダー5・メタエディター5がお使いのパソコンにインストールされている必要があります。
もし、まだメタトレーダー5のダウンロードが完了していない方は、
こちらからデモ口座の開設とメタトレーダー5のダウンロード・インストールを完了して頂ければと思います。
多次元配列とは?
変数が複数連なったもの
という表現をしました。
今回取り上げる多次元配列というのは、
配列が複数連なったもの。
という言い方ができるでしょう。
「どういうこと?( ゚Д゚)」と思われたかもしれません。
多次元配列はコードにするとこんな感じです。
//多次元配列「multiDimension」を作る。
double multiDimension[3][3];
変数配列名のmultiDimensionの後ろに、[3]が2個ついていますね。
これは3個のデータを格納できる変数配列が2個くっついている状態を意味しています。
これが2次元配列になります。(これまでの講座記事で取り上げてきたのは1次元配列になります)
値を代入してみましょう。[]が2個つくと、2次元配列、[][][]と3個で3次元配列となります。
(が!2次元以上の多次元配列が使われることはほとんどありません。基本的には構造体の方が使い勝手が良いからです)
//各変数配列に値を代入していく。
multiDimension[0][0]=1.2;
multiDimension[0][1]=1.5;
multiDimension[0][2]=1.8;
multiDimension[1][0]=2.5;
multiDimension[1][1]=3.2;
multiDimension[1][2]=4.6;
multiDimension[2][0]=4.8;
multiDimension[2][1]=6.9;
multiDimension[2][2]=8.3;
何が起こっているか、ついてこれておりますでしょうか?
なんか、ピンとこない、という人は
エクセルなどに代表される、行列で構成された表を思い浮かべると理解がしやすいかもしれません。
multiDimension | [0] | [1] | [2] |
[0] | 1.2 | 1.5 | 1.8 |
[1] | 2.5 | 3.2 | 4.6 |
[2] | 4.8 | 6.9 | 8.3 |
こんな↑感じで値が格納されているイメージを思い浮かべてもらうといいでしょう。
今までの1次元配列は1行しかない表と考えてみると・・・
[0] | [1] | [2] | |
multiDimension |
横軸だけではなく、縦軸にもデータを格納できるということは
単に、より多くのデータを扱える、というだけでなくデータを表形式的に整理・利用できるということを意味します。
多次元配列においては、動的配列にできるのは、初めの配列だけです。(後に連なる2次元3次元・・・は静的配列になります)
※「静的配列と動的配列って何だっけ?」という方は→前回の記事をご覧ください。
※プログラミング文脈における「静的」と「動的」という言葉についての詳細は↓の記事をご参照ください
//多次元配列「multiDimension」の最初の次元は動的配列にする
double multiDimension[][3];
1次元目の配列は動的配列、2次元目の配列は静的配列として作られました。
最初の次元の配列を、変更・設定するのにArrayResize関数を使うのは、1次元配列と同じです。
//多次元配列「multiDimension」の最初の次元は動的配列にする
double multiDimension[][3];
//最初の次元の配列サイズを3に設定する
ArrayResize(multiDimension,3);
コメント