初学者的问题 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'-参数转换不允许 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'-参数转换不允许 e.mq5 2076 20"

它写在帮助中。

注意事项

AS_SERIES标志不能被设置为多维 数组和静态数组(即在编译时已经指定了方括号内大小的数组)。

又是什么原因使你不能用我建议的功能进行分类?

 
Artyom Trishkin:
它写在帮助中。

注意事项

AS_SERIES标志不能被设置为多维 数组和静态数组(即方括号中的数组大小在编译时被指定)。

但有什么能阻止你用我建议的函数来整理它呢?

当把它传入函数时,完全是同样的错误
 
Vitaly Muzichenko:
转移到一个函数时出现完全相同的错误
哪一个?
 
Artyom Trishkin:
哪一个?

对你的"ArraySortBubbleTwoDims"。

总之,我已经扩大了循环,问题得到了解决。但我还是希望看到一个标准函数形式的正常解决方案