Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 732

 
Vitalie Postolache:
А если после сортировки поменять порядок индексации с помощью ArraySetAsSeries?
ArraySetAsSeries не применяется к многомерным массивам.
 
Alexey Viktorov:
ArraySetAsSeries не применяется к многомерным массивам.

Да, не применяется. А кто знает что применяется, ответьте пожалуйста. 

 
Vitaly Muzichenko:

Да, не применяется. А кто знает что применяется, ответьте пожалуйста. 

Иногда использую пузырьковую сортировку двумерного массива. Можно выбрать направление и размерность, по которой сортировать
 
Artyom Trishkin:
Иногда использую пузырьковую сортировку двумерного массива. Можно выбрать направление и размерность, по которой сортировать

К Вам приехать домой за кодом, или всё-таки выложите, если не жалко)

Добавлено: А на сколько он ресурсо-затратный?,  может всё-же перевернуть цикл, чего делать крайне не хочется.

 
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"

В общем, развернул цикл и вопрос решён. Но всё-же хотелось видеть нормальное решение в виде стандартной функции

Причина обращения: