Sortierung eines 2-dimensionalen Arrays nach der zweiten Dimension - Seite 3

 
cameofx wrote >>
Dies sind die Art und Weise ich es auch vorgestellt. die Referenz, die ich in Bezug auf erste Dimension zitiert warf mich aus...(siehe oben Post). Wir können also logischerweise nicht die Größe der ColumnNumber und/oder WorksheetNumber
und/oder BookNumber...nur die RowNumber. Das ist das äußerste linke Paar von Klammern in 2D-, 3D- und 4D-Arrays.


Gordon hat dies bereits bestätigt, aber da Sie mein Beispiel zitiert haben, bin ich gezwungen, ebenfalls zu antworten, nur um zu bestätigen, dass Ihre Interpretation meines Beitrags korrekt ist.

 
1005phillip:


Gordon hat das bereits bestätigt, aber da Sie mein Beispiel zitiert haben, sehe ich mich gezwungen, ebenfalls zu antworten, nur um zu bestätigen, dass Ihre Interpretation meines Beitrags richtig ist.

Dieser Beitrag war als Antwort auf Ihren Beitrag gedacht, ich habe vergessen, Ihren Namen zu nennen, mein Fehler :)

 

ok altes Thema, aber dieser Code könnte jemandem beim Sortieren des zweiten Dim helfen.

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;
      }
   }
}
und absteigend....
 
Die Alternative zur Sortierung ist die Erstellung einer Indextabelle.
// 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.

Schneller und ermöglicht verschiedene Datentypen mit verständlichen Variablennamen in verschiedenen eindimensionalen Feldern.

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

int Kaufen.Ticket[] und double Kaufen.Preis[] ist einfacher zu verstehen und enthält den richtigen Datentyp.
 
LEHayes:


Ich bin wirklich müde und erschöpft von dem Versuch, die Freigabe von etwa 5 Strategien aus der Tür zu schieben, so dass dies ein wenig von einer nice-ity statt einer Notwendigkeit geworden.

Ich bin bereit, mit jedem, der diese Funktion für mich schreiben kann, ein Geschäft zu machen. Ich überlasse Ihnen ein Produkt Ihrer Wahl mit einer Jahreslizenz, wenn Sie mir dabei helfen, und außerdem gebe ich Ihnen eine persönliche Kopie dieser Hedging-Strategie zur kostenlosen, unbegrenzten Nutzung auf Lebenszeit. Ich bin einfach zu überlastet, um das alles zu tun, und mein Entwicklungsteam ist mit der Freigabe dessen, was wir bereits auf unseren Tellern haben, stark belastet. Ich glaube, der durchschnittliche Schlafwert im Team liegt bei 4 bis 6 Stunden pro Tag.

Offensichtlich bin ich nicht derjenige, der das für Sie tun kann, aber ich nehme an, dass ich den Berg bei Arrays erklimme, aber ich stolpere immer noch über Schlaglöcher und Steine auf dem Parkplatz.... . . .

Von dem, was u haben & andere sachkundige Programmierer hier haben Sie eine Lösung, wenn auch ein kluge: nur brauchen jemanden, der die Zeit nehmen und es tun.

Außerdem: es gibt zahlreiche mql 4 <=> Excel-Schnittstellen. Allerdings hat Excel v2007 einen Fehler, der es nicht zulässt, dass das Blatt vergrößert wird, nachdem es erstellt wurde: nur eine kleine Unannehmlichkeit: NICHT! Es ist sehr schade, dass dieser Fehler noch nicht behoben wurde, aber wie es sich für MS gehört, werden sie ihn wahrscheinlich beibehalten und ihn als zusätzlichen Anreiz für den Kauf der neuesten Version 201x nutzen, wenn diese herauskommt.

Wenn man so viele Produkte im Regal stehen hat, ist es vielleicht an der Zeit, den Hut zu wechseln und für eine Weile aus dem Programmierkäfig herauszukommen und sich auf Marketing und Verkauf zu konzentrieren?

 

Russel & WHRoeder, vielen Dank. Das würde mir sehr helfen!
Ich bin ein autodidaktischer Programmierer. Ihr wisst nicht, wie langsam ich bin , wenn ich selbst Geräte bauen und Tests durchführen würde (was ich regelmäßig tue, um etwas herauszufinden...).

@FourX : Bleiben Sie dran... ein Array nach dem anderen, Sie werden es schließlich schaffen...

 
Russell:
und absteigend....

Hallo Russell


Ihr vorgeschlagener Algorithmus funktioniert ziemlich gut, nur wenn es 2 oder mehr Elemente sind mit dem gleichen Wert in den Arrays, ist es nicht in der Lage, die Sortierung zu tun ..Eg, ldSource[2][1] = 435, ldSource[3][1] = 435. Irgendein Vorschlag für diese Art von Fall. Vielen Dank



   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:
Die Alternative zur Sortierung ist die Erstellung einer Indextabelle.

Schneller, und ermöglicht verschiedene Datentypen mit verständlichen Variablennamen in verschiedenen eindimensionalen Arrays.

int Buy.Ticket[] und double Buy.Price[] ist einfacher zu verstehen und enthält den richtigen Datentyp.

Dies ist ein sehr nützlicher Beitrag, der einen wichtigen Ansatz abdeckt, den ich nirgendwo anders im Detail diskutiert gesehen habe.

Ich muss in einer ähnlichen Situation einen Index mit einer Einfügesortierung konstruieren.

Darf ich fragen, ob es einen Tippfehler gibt - so wie ich es verstehe, existiert die Variable ii nur innerhalb des Körpers der for-Schleife?

Mir ist klar, dass es sich hierbei um ungetesteten Beispielcode oder leicht bearbeiteten Arbeitscode handeln könnte, und ich will nicht pedantisch sein, aber ich bin neugierig.

Vielen Dank für Ihre häufigen informativen Beiträge.

 

wie ich sehe, braucht Code #23 & #24 wirklich eindeutige Schlüssel, um nach ihnen zu sortieren...

die Logik von #25 verwende ich selbst manchmal