Questions des débutants MQL5 MT5 MetaTrader 5 - page 732

 
Vitalie Postolache:
Que se passe-t-il si, après le tri, vous modifiez l'ordre d'indexation en utilisant ArraySetAsSeries ?
ArraySetAsSeries ne s'applique pas aux tableaux multidimensionnels.
 
Alexey Viktorov:
ArraySetAsSeries ne s'applique pas aux tableaux multidimensionnels.

Oui, il ne s'applique pas. Et qui sait ce qui s'applique, veuillez répondre.

 
Vitaly Muzichenko:

Oui, il ne s'applique pas. Et qui sait ce qui s'applique, veuillez répondre.

J'utilise parfois le tri à bulles sur un tableau à deux dimensions. Vous pouvez sélectionner la direction et la dimension par lesquelles vous voulez trier.
 
Artyom Trishkin:
J'utilise parfois le tri à bulles sur un tableau à deux dimensions. Vous pouvez choisir la direction et la dimension par lesquelles vous voulez trier.

Venez chez vous pour le code, ou postez-le, si vous le voulez bien)

Ajouté : à quel point cela consomme-t-il des ressources ? autant inverser la boucle, ce que je ne veux pas faire.

 
Vitaly Muzichenko:
Venez chez vous pour le code, ou postez-le si vous le voulez bien)
Eh bien, prenez une bière et venez nous rendre visite ;)

Je ne me souviens pas de la dimension du tableau que vous avez écrit - peut-être que vous n'en avez pas besoin, et je vais pousser ...

//+------------------------------------------------------------------+
//| Пузырьковая сортировка двумерного массива                        |
//+------------------------------------------------------------------+
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;
                  }
               }
            }
         }
      }
}
//+------------------------------------------------------------------+
Je l'ai sorti de ma réserve et j'ai rapidement changé pour un modèle. J'ai peut-être fait une erreur dans la précipitation...
 
Artyom Trishkin:
Eh bien, prenez une bière et venez nous rendre visite ;)

Je ne me souviens pas de la dimension du tableau que vous avez écrit - peut-être n'en avez-vous pas besoin, et je vais le mettre ici ...

C'est l'hiver, mais les skis ne veulent pas partir.

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

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

Erreur : "'m' - conversion de paramètres non autorisée e.mq5 2076 20".

 
Vitaly Muzichenko:

C'est l'hiver, mais les skis ne veulent pas partir.

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

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

Erreur : "'m' - conversion de paramètres non autorisée e.mq5 2076 20".

C'est écrit dans l'aide :

Note

L'indicateur AS_SERIES ne peut pas être défini pour les tableaux multidimensionnels et pour les tableaux statiques (c'est-à-dire les tableaux dont la taille entre crochets est déjà spécifiée au moment de la compilation).

Et qu'est-ce qui vous empêche de le trier avec la fonction que je propose ?

 
Artyom Trishkin:
C'est écrit dans l'aide :

Note

L'indicateur AS_SERIES ne peut pas être défini pour les tableaux multidimensionnels et les tableaux statiques (c'est-à-dire les tableaux dont la taille entre crochets est spécifiée au moment de la compilation).

Mais qu'est-ce qui vous empêche de faire le tri en utilisant la fonction que je propose ?

Exactement la même erreur quand on le passe dans la fonction
 
Vitaly Muzichenko:
Exactement la même erreur lors du transfert vers une fonction
Laquelle ?
 
Artyom Trishkin:
Laquelle ?

A votre"ArraySortBubbleTwoDims".

Quoi qu'il en soit, j'ai élargi la boucle et le problème est résolu. Mais j'aimerais quand même voir une solution normale sous la forme d'une fonction standard