trier un tableau à deux dimensions par la deuxième dimension - page 3

 
cameofx wrote >>
La référence que j'ai citée concernant la première dimension m'a déconcerté (voir le message ci-dessus). Donc, logiquement, nous ne pouvons pas redimensionner le numéro de colonne et/ou le numéro de feuille de travail et/ou le numéro de livre.
et/ou le BookNumber...seulement le RowNumber. Il s'agit de la paire de crochets la plus à gauche dans les tableaux 2D, 3D et 4D.


Gordon a déjà confirmé, mais puisque vous avez cité mon exemple, je suis obligé de répondre également, juste pour confirmer que votre interprétation de mon message est correcte.

 
1005phillip:


Gordon l'a déjà confirmé, mais puisque vous avez cité mon exemple, je suis obligé de répondre également, juste pour confirmer que votre interprétation de mon message est correcte.

Ce message était destiné à répondre au vôtre, j'ai oublié d'adresser votre nom, mon erreur :)

 

ok vieux sujet, mais ce code pourrait aider quelqu'un à trier le second dim.

int start(){

   double ldDest[6][2];
   double ldSource[6][2];
   ldSource[0][0] = 643;
   ldSource[0][1] = 3236;
   ldSource[1][0] = 46769;
   ldSource[1][1] = 523;
   ldSource[2][0] = 234;
   ldSource[2][1] = 435;
   ldSource[3][0] = 854;
   ldSource[3][1] = 3344;
   ldSource[4][0] = 8465;
   ldSource[4][1] = 2434;
   ldSource[5][0] = 1545;
   ldSource[5][1] = 341;
   _ArraySort2D(ldDest, ldSource, 1);
   for (int i = 0; i < ArrayRange(ldDest,0); i++){      
      Print(i," ",1,"= ",ldDest[i,1]);    
   }
}

void _ArraySort2D(double &rdDest[][], double _dSource[][], int _iSortIndex){
   
   int liSize[2];
   liSize[0] = ArrayRange(_dSource, 0);
   liSize[1] = ArrayRange(_dSource, 1);
   int liPosition;
   
   for (int i = 0; i < liSize[0]; i++){
      liPosition = 0;
      for (int j = 0; j < liSize[0]; j++){
         if (_dSource[i,_iSortIndex] > _dSource[j,_iSortIndex]){
           liPosition++;
         }
      }
      ArrayCopy(rdDest, _dSource, liPosition*liSize[1], i*liSize[1],  liSize[1]);
   }
}
 
void _ArraySort2D(double &rdDest[][], double _dSource[][], int _iSortIndex, int _iDirection=MODE_ASCEND){
   
   int liSize[2];
   liSize[0] = ArrayRange(_dSource, 0);
   liSize[1] = ArrayRange(_dSource, 1);
   int liPosition;
   
   for (int i = 0; i < liSize[0]; i++){
      switch(_iDirection){
         case MODE_ASCEND:
            liPosition = 0;
            for (int j = 0; j < liSize[0]; j++){
               if (_dSource[i,_iSortIndex] > _dSource[j,_iSortIndex]){
                 liPosition++;
               }
            }
            ArrayCopy(rdDest, _dSource, liPosition*liSize[1], i*liSize[1],  liSize[1]);
            break;
         case MODE_DESCEND:
            liPosition = liSize[0]-1;
            for (j = 0; j < liSize[0]; j++){
               if (_dSource[i,_iSortIndex] > _dSource[j,_iSortIndex]){
                 liPosition--;
               }
            }
            ArrayCopy(rdDest, _dSource, liPosition*liSize[1], i*liSize[1],  liSize[1]);
            break;
      }
   }
}
et descendant....
 
L'alternative au tri est de créer une table d'index.
// Cog[], Cog.EMA[], Cog.EMA.prev[], Cog.ticket[]

    int order[COGLINES];                // Keep relative ordering of Cog,
    for (int kk=0; kk<COGLINES; kk++) { // Cog.EMA, Cog.EMA.prev and COG.ticket
        for (int ii=kk; ii>0 && COG[order[ii-1]] > COG[kk]; ii--) {
            order[ii]=order[ii-1];  // kk   cog[kk] order[kk]   cog[order[kk]]
        }                           // 0    3.      1           1.
        order[ii]=kk;               // 1    1.      2           2.
    }                               // 2    2.      0           3.

Plus rapide, il permet d'utiliser différents types de données avec des noms de variables compréhensibles dans différents tableaux unidimensionnels.

AryBuy[1][0] contains the ticket, AryBuy[1][1] contains the price.

int Buy.Ticket[] et double Buy.Price[] est plus facile à comprendre et contient le bon type de données.
 
LEHayes:


Je suis vraiment fatigué et épuisé d'essayer de pousser la sortie d'environ 5 stratégies, donc c'est devenu un peu un plaisir au lieu d'une nécessité.

Je suis prêt à passer un accord avec toute personne qui peut écrire cette fonction pour moi. Je vous donnerai le produit de votre choix avec une licence d'un an, gratuitement pour m'avoir aidé sur ce point et, en plus, je vous donnerai une copie personnelle de cette stratégie de couverture pour une utilisation gratuite et illimitée à vie. Je suis tout simplement trop débordé pour tout faire et mon équipe de développement est lourdement chargée de publier ce qui est déjà sur nos plaques. Je pense que la durée moyenne de sommeil dans l'équipe est de 4 à 6 heures par jour.

Il est évident que je ne suis pas celui qui peut facilement faire cela pour vous, bien que je suppose que je grimpe la colline sur Arrays ; mais je trébuche toujours sur les nids de poule et les rochers dans le parking.... . . . .

D'après ce que vous avez dit et ce qu'ont dit d'autres programmeurs compétents ici, vous avez une solution, même si elle n'est pas parfaite : il faut juste que quelqu'un prenne le temps de la faire.

De plus, il existe de nombreuses interfaces mql 4 <=> Excel. Bien qu'Excel v2007 ait un bug qui ne permet pas d'agrandir la feuille après qu'elle ait été créée : juste un PETIT inconvénient : PAS ! C'est très dommage de ne pas l'avoir corrigé jusqu'à présent, mais à la manière MS, on va probablement le laisser et l'utiliser comme une incitation supplémentaire à acheter la dernière v201x quand elle sortira.

Vous avez autant de produits prêts à l'emploi sur l'étagère, il est peut-être temps de changer de chapeau et de sortir de la cage de codage pour un moment et de se concentrer sur le marketing et les ventes ?

 

Russel & WHRoeder, Merci beaucoup. Ils m'ont beaucoup aidé !
Je suis un programmeur autodidacte. Vous ne savez pas à quel point je suis lent si je devais faire des tests tout seul (ce que je fais régulièrement pour comprendre des choses...).

@FourX : Continuez à battre le fer... un tableau à la fois, vous finirez par y arriver...

 
Russell:
et descendant....

Bonjour Russell


L'algorithme que vous avez suggéré fonctionne assez bien, mais lorsqu'il y a 2 éléments ou plus qui portent la même valeur dans les tableaux, il est incapable d'effectuer le tri. Par exemple, ldSource[2][1] = 435, ldSource[3][1] = 435. Une suggestion pour ce genre de cas. Thx



   ldSource[0][0] = 643;
   ldSource[0][1] = 3236;
   ldSource[1][0] = 46769;
   ldSource[1][1] = 523;
   ldSource[2][0] = 234;
   ldSource[2][1] = 435;
   ldSource[3][0] = 854;
   ldSource[3][1] = 435;
 
whroeder1:
L'alternative au tri est de créer une table d'index.

Plus rapide, il permet d'utiliser différents types de données avec des noms de variables compréhensibles dans différents tableaux unidimensionnels.

int Buy.Ticket[] et double Buy.Price[] est plus facile à comprendre et contient le bon type de données.

Il s'agit d'un article très utile qui couvre une approche importante que je n'ai pas vue en détail ailleurs.

J'ai besoin de construire un index avec un tri par insertion dans une situation similaire.

Puis-je demander s'il y a une faute de frappe - si je comprends bien, la variable ii n'existe que dans le corps de la boucle for ?

Je comprends qu'il peut s'agir d'un code d'exemple non testé ou d'un code de travail légèrement modifié et je n'essaie pas d'être pédant mais je suis curieux.

Merci beaucoup pour vos fréquents messages informatifs.

 

comme je vois le code #23 & #24 a vraiment besoin de clés uniques pour trier selon eux ...

la logique de #25, je l'utilise moi-même parfois