Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 732

 
Vitalie Postolache:
Was passiert, wenn Sie nach der Sortierung die Indizierungsreihenfolge mit ArraySetAsSeries ändern?
ArraySetAsSeries gilt nicht für mehrdimensionale Arrays.
 
Alexey Viktorov:
ArraySetAsSeries gilt nicht für mehrdimensionale Arrays.

Ja, das ist nicht der Fall. Und wer weiß, was gilt, bitte antworten.

 
Vitaly Muzichenko:

Ja, das ist nicht der Fall. Und wer weiß, was gilt, bitte antworten.

Manchmal verwende ich die Blasensortierung für ein zweidimensionales Array. Sie können die Richtung und Dimension wählen, nach der sortiert werden soll
 
Artyom Trishkin:
Manchmal verwende ich die Blasensortierung für ein zweidimensionales Array. Sie können die Richtung und Dimension wählen, nach der sortiert werden soll

Ich komme zu Ihnen nach Hause, um den Code zu erfahren, oder ich schicke ihn Ihnen zu, wenn Sie nichts dagegen haben.)

Hinzugefügt: Wie ressourcenintensiv ist es?, könnte auch die Schleife invertieren, was ich nicht tun möchte.

 
Vitaly Muzichenko:
Ich komme zu Ihnen nach Hause, um den Code zu erfahren, oder ich schicke ihn Ihnen, wenn Sie nichts dagegen haben)
Also, nimm ein Bier mit und komm uns besuchen ;)

Ich erinnere mich nur nicht, welche Dimension des Arrays Sie schrieb - vielleicht brauchen Sie es nicht, und ich werde schieben ...

//+------------------------------------------------------------------+
//| Пузырьковая сортировка двумерного массива                        |
//+------------------------------------------------------------------+
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;
                  }
               }
            }
         }
      }
}
//+------------------------------------------------------------------+
Ich zog es aus dem Vorrat und wechselte schnell zu einer Schablone. Vielleicht habe ich in der Eile einen Fehler gemacht...
 
Artyom Trishkin:
Also, schnapp dir ein Bier und komm vorbei ;)

Ich weiß nur nicht mehr, welche Dimension des Arrays Sie geschrieben haben - vielleicht brauchen Sie es nicht, und ich werde es hier einfügen ...

Es ist Winter, aber die Skier wollen nicht fahren

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 работает

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

Fehler: "'m' - Parameterumwandlung nicht erlaubt e.mq5 2076 20"

 
Vitaly Muzichenko:

Es ist Winter, aber die Skier wollen nicht fahren

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 работает

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

Fehler: "'m' - Parameterumwandlung nicht erlaubt e.mq5 2076 20"

So steht es in der Hilfe:

Hinweis

Das AS_SERIES-Flag kann nicht für mehrdimensionale Arrays und für statische Arrays (d.h. Arrays, deren Größe in eckigen Klammern bereits zur Kompilierzeit festgelegt ist) gesetzt werden.

Und was hindert Sie daran, sie mit der von mir vorgeschlagenen Funktion zu sortieren?

 
Artyom Trishkin:
So steht es in der Hilfe:

Hinweis

Das AS_SERIES-Flag kann nicht für mehrdimensionale Arrays und statische Arrays (d.h. Arrays, deren Größe in eckigen Klammern zur Kompilierzeit angegeben wird) gesetzt werden.

Aber was hindert Sie daran, es mit der von mir vorgeschlagenen Funktion zu regeln?

Genau der gleiche Fehler bei der Übergabe an die Funktion
 
Vitaly Muzichenko:
Genau der gleiche Fehler bei der Übergabe an eine Funktion
Welcher ist es?
 
Artyom Trishkin:
Welcher ist es?

Zu Ihrem"ArraySortBubbleTwoDims".

Wie auch immer, ich habe die Schleife erweitert und das Problem ist gelöst. Aber ich würde trotzdem gerne eine normale Lösung in Form einer Standardfunktion sehen

Grund der Beschwerde: