初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 732

 
Vitalie Postolache:
ソート後にArraySetAsSeriesでインデックスの順番を変更した場合はどうなりますか?
ArraySetAsSeriesは多次元配列には 適用されません。
 
Alexey Viktorov:
ArraySetAsSeriesは多次元配列には 適用されません。

はい、適用外です。そして、何が当てはまるかわかる人、お答えください。

 
Vitaly Muzichenko:

はい、適用外です。そして、何が当てはまるかわかる人、お答えください。

2次元の配列に対してバブルソートを使うこともあります。ソートする方向と次元を選択することができます
 
Artyom Trishkin:
2次元配列でバブルソートを使うこともあります。ソートする方向と次元を選択することができます

コードを取りに家に来るか、ポストに投函するか、どちらでも構いません)

追記:どの程度リソースを消費するのか、ループを反転させた方がいいかもしれない、それはやりたくない。

 
Vitaly Muzichenko:
コードを取りに家に来るか、郵送してくれても構わない)
ビールを持って遊びに来てください。)

私はちょうどあなたが書いた配列の次元を覚えて いない - 多分あなたはそれを必要としない、と私は突き出すだろう...

//+------------------------------------------------------------------+
//| Пузырьковая сортировка двумерного массива                        |
//+------------------------------------------------------------------+
template<typename T>
void ArraySortBubbleTwoDims(T& array[][TWO_DIM], int sort_dimension=0, int sort_direction=0) {
   T     t=0;
   int   k=ArrayRange(array,1);    // Количество колонок
   int   n=ArrayRange(array,0);    // Количество строк
  
   //---
   if(sort_dimension<0) sort_dimension=0;
   if(sort_dimension>k) sort_dimension=k;
   //---
   for(int i=n-1; i>0; i--) {
      for(int j=0; j<i; j++) {
         //--- по возрастанию
         if(sort_direction==0) {
            if(array[j][sort_dimension]>array[j+1][sort_dimension]) {
               for(int e=0; e<k; e++) {
                  t=array[j][e];
                  array[j][e]=array[j+1][e];
                  array[j+1][e]=t;
                  }
               }
            }
         //--- по убыванию
         else {
            if(array[j][sort_dimension]<array[j+1][sort_dimension]) {
               for(int e=0; e<k; e++) {
                  t=array[j][e];
                  array[j][e]=array[j+1][e];
                  array[j+1][e]=t;
                  }
               }
            }
         }
      }
}
//+------------------------------------------------------------------+
隠し場所から引っ張り出してきて、すぐにテンプレートに切り替えたんです。焦って間違えたかもしれません...。
 
Artyom Trishkin:
ビールでも飲みながら、遊びに来てください。)

私はちょうどあなたが書いた配列の どの次元を覚えて いない - 多分あなたはそれを必要としないので、私はそれをここに置くでしょう...

冬なのにスキーが滑らない

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

... здесь работа с уже сортированным массивом и основной код
}

エラー: "'m' - parameter conversion not allowed e.mq5 2076 20".

 
Vitaly Muzichenko:

冬なのにスキーが滑らない

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

... здесь работа с уже сортированным массивом и основной код
}

エラー: "'m' - parameter conversion not allowed e.mq5 2076 20".

ヘルプに書いてあります。

備考

AS_SERIES フラグは,多次元配列と 静的配列(コンパイル時に角括弧で囲まれたサイズが既に指定されている配列)には設定できない。

また、私が提案する機能でソートすることを妨げるものは何でしょうか?

 
Artyom Trishkin:
ヘルプに書いてあります。

備考

AS_SERIES フラグは,多次元配列と 静的配列(コンパイル時に角括弧で囲まれたサイズを指定する配列)には設定できません。

しかし、私が提案する機能を使って整理することを妨げるものは何でしょうか?

関数に渡すと全く同じエラーが発生する
 
Vitaly Muzichenko:
関数への転送時に全く同じエラーが発生する
どれだ?
 
Artyom Trishkin:
どれだ?

あなたの「ArraySortBubbleTwoDims」へ。

とにかく、ループを拡張して、問題は解決しました。しかし、やはり標準的な関数の形で、正常な解が欲しいところです

理由: