質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

解決済

1回答

2537閲覧

【MQL4】多次元配列の次元ごとに最大値のインデックスを取得したい

josh

総合スコア5

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

0グッド

0クリップ

投稿2021/08/02 15:02

編集2021/08/02 23:20

前提・実現したいこと

タイトルの通り、多次元配列の次元ごとに最大値のインデックスを取得したいのですが、
ArrayMaximum関数を使用すると以下のようなエラーが出ます。(arrayは配列名)

発生している問題・エラーメッセージ

'array' - invalid array access 'array' - array required

該当のソースコード

MQL4

1int array[2][3]={1,2,3,4,5,6}; 2Print(ArrayMaximum(array[0]));

試したこと

他言語の経験から、array[0]とすれば、前半の{1,2,3}を指定したことになり、
その最大値3のインデックス2が取得できることを期待しましたが、上記エラーとなります。

補足情報(FW/ツールのバージョンなど)

MetaEditor Version: 5.00 build 2379

ご教示いただければ幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ArrayMaximum(array)ならコンパイルは通りました。
リファレンスを見るとarray[0]とarray[1]の最初の要素(array[0][0]とarray[1][0])しか見てくれないようです。

自分で作るしかないのかもしれません。

MQL4

1// スクリプト 2#property strict 3 4template <typename T> 5int ArrayMaximum2(const T& arr[][], int index) 6{ 7 if (index >= ArrayRange(arr, 0)) { 8 return -1; 9 } 10 11 int result = 0; 12 13 for (int i = 1; i < ArrayRange(arr, 1); i++) { 14 if(arr[index][result] < arr[index][i]) { 15 result = i; 16 } 17 } 18 19 return result; 20} 21 22void OnStart() 23{ 24 int array[][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 9, 8, 7 } }; 25 26 for (int i = 0; i < ArrayRange(array, 0); i++) { 27 printf("array[%d] = %d", i, ArrayMaximum2(array, i)); 28 } 29 30 double arrayD[][3] = { { 1, 3, 2 }, { 6, 5, 4 }, { 7, 8, 9 } }; 31 32 for (int i = 0; i < ArrayRange(arrayD, 0); i++) { 33 printf("arrayD[%d] = %d", i, ArrayMaximum2(arrayD, i)); 34 } 35}

投稿2021/08/02 17:29

編集2021/08/03 00:30
mah

総合スコア591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

josh

2021/08/02 23:40 編集

ご回答ありがとうございます。 ご指摘の宣言文 ```MQL4 int array[2][3]={{1,2,3},{4,5,6}}; ``` は最初に試していましたが、エラー内容は同じでした。 (念のため、バージョン情報を追加しました。) 色々調べても情報が出てこないということは、仰る通り自作するしかないのかもしれません。 サンプルコードまで記述していただき、誠にありがとうございます。 これ以上回答がないようであれば、その方向で進めたいと思います。 誠にありがとうございました。
mah

2021/08/03 00:31

回答ミスってたので修正しました。配列の初期化は関係なかったです。 ArrayMaximum(array[0])の部分がコンパイルエラーの原因ですね。
josh

2021/08/03 13:47

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問