[MQL]二次元配列を「2次元目で」ソートする方法

MQL4で二次元配列をソートする方法を説明します。

ArraySort関数は、「配列の一次元目でソートする」という仕様ですので、二次元配列を「2次元目で」ソートしたい場合は、少しだけ工夫する必要があります。考え方さえ理解すれば三次元以上の多次元配列にも応用が可能です。

ここでは分かりやすさのため、一次元配列のソートから順に説明します。

一次元配列のソート方法

まずは、一次元配列のソート方法のおさらいです。

配列を宣言

配列を宣言して一次元配列を作成します。

1次元配列の宣言

配列をソート

ArraySort(配列名)関数で昇順にソート。

1次元配列のソート

一次元配列はArraySort(配列名)関数で配列名を指定するだけです。シンプルです。

二次元配列のソート方法(デフォルト動作)

次に、二次元配列にArraySort()を適用したときにどのような動作になるか確認してみましょう。二次元配列にArraySort()を単純に適用してみます。

二次元配列を宣言

5×2の二次元配列を作成します。

2次元配列の宣言

ArraySortでソート

二次元配列にArraySort()を実行します。

2次元配列のソート

すると、このように二次元配列の「1次元目のデータ」でソートされます。

これはこれで便利ですが、二次元配列を「2次元目のデータ(上図では、12, 15, 11, 14, 13)」でソートしたい場合もありますよね。

二次元配列のソート方法(2次元目でソート)

では二次元配列を2次元目のデータでソートしてみます。上で述べたように、二次元配列に単純にArraySort()を適用すると1次元目のデータでソートされてしまうので、2次元目のデータでソートされるように少し工夫します。

二次元配列を宣言

5×2の二次元配列を作成します。

2次元配列の宣言

インデックスを入れ替える

ここで一工夫入れます。for文を使って「2次元目のインデックス番号0のデータ」と「2次元目のインデックス番号1のデータ」をそっくり入れ替えます。

2次元配列のインデックスデータ入れ替え

ArraySort()でソート

ArraySort()を実行すれすると、「もともとは2次元目にあったデータ」でソートされます。

2次元配列のソート(インデックスデータ入れ替え後)

インデックスを元に戻す

ふたたび「2次元目のインデックス番号0のデータ」と「2次元目のインデックス番号1のデータ」を入れ替えれて元に戻すとソート完了です。

2次元配列のインデックスデータの再入れ替え

これで二次元配列を「2次元目のデータ」でソートすることができます。

まとめ

まとめると、二次元配列を2次元目のデータ順にソートしたい場合には、「いったんデータのインデックスを入れ替えてからソートし、ソート後にインデックスを元に戻す」ことで実現できます。

三次元配列などの場合も考え方は同じです。コードを書く時には、上で説明したように配列の図を書きながら考えるとわかりやすいと思います。

コメント

この記事へのコメント(0 件)