Logique d'apprentissage - page 15

 
hrenfx:

Parfois, vous avez besoin de trier les données dans MQL4 sans toucher aux données elles-mêmes. Il n'y a pas de pointeurs dans MQL4, il n'y a pas non plus de structures.

Une autre variante consiste à créer un tableau Positions[][2], à copier le paramètre à trier par l'index zéro et à donner le premier index aux positions. Puis trier le tableau avec la fonction standard AgraSort.

L'avantage est qu'AgraSort utilise un algorithme de tri efficace, de plus, il fonctionne en code natif.

 
Candid:

Alternativement, vous pouvez créer un tableau Positions[][2], copier le paramètre à trier par l'index zéro et donner le premier index aux positions. Après cela, triez le tableau avec la fonction standard AgraSort.

Pourriez-vous convertir mon script, à la page précédente, en utilisant votre méthode ? Je ne comprends pas la description.
 
hrenfx:
Pourriez-vous convertir mon script, à la page précédente, en utilisant votre méthode ? Je ne comprends pas la description.

J'ai aimé la méthode proposée par https://www.mql5.com/ru/users/candid. Utilisé pour rendre les choses un peu plus compliquées. Je vais en utiliser un plus simple. Vous pouvez trier par n'importe quel attribut. Très pratique.
 
hrenfx:
Pourriez-vous convertir mon script, à la page précédente, en utilisant votre méthode ? Je ne comprends pas la description.

Je ne vous donnerai pas le script complet, mais je vous donnerai une esquisse de la fonction, cela devrait être suffisant pour comprendre l'idée.

void SortArrayINT( int& Array[], int& Positions[][]) {
  int i, Size = ArraySize(Array);
    
  ArrayResize(Positions, Size);
  
  for (i = 0; i < Size; i++) {
    Positions[i][0] = Array[i];
    Positions[i][1] = i;
  }
  ArraySort(Positions);
  return;
}


Maintenant, Positions[0][1] contient l'indice du plus petit élément du tableau, Positions[1][1] contient l'indice du plus grand élément suivant du tableau et Positions[i][1] contient l'indice du ième élément.

 
Candid:

Je ne vais pas écrire tout le script, mais je vais vous donner une esquisse de la fonction, cela devrait suffire pour comprendre l'idée.

Je ne connaissais pas les particularités du travail avec les tableaux multidimensionnels dans MQL4. Merci, la méthode fonctionne :

void SortArrayINTCandid( int Array[], int& Positions[][] )
{
  int Size = ArraySize(Array);
    
  ArrayResize(Positions, Size);
  
  for (int i = 0; i < Size; i++)
  {
    Positions[i][0] = Array[i];
    Positions[i][1] = i;
  }

  ArraySort(Positions);

  return;
}

void PrintInfo( string SortName, int Array[] )
{
  int PositionsCandid[][2];
  
  SortArrayINTCandid(Array, PositionsCandid);
  
  Print("Sort by " + SortName);
  Print("SYMBOL   PROFIT   POS   SL");

  for (int i = 0; i < AMOUNT; i++)
    Print(Symbols[PositionsCandid[i][1]] + "   " + Profit[PositionsCandid[i][1]] + "   " +
          Pos[PositionsCandid[i][1]] + "   " + SL[PositionsCandid[i][1]]);
          
  Print("");
          
  return;
}