ordinamento di una matrice a 2 dimensioni per la seconda dimensione - pagina 3

 
cameofx wrote >>
Questo è il modo in cui l'ho immaginato anch'io. il riferimento che ho citato riguardo alla prima dimensione mi ha confuso...(vedi post sopra). Quindi logicamente non possiamo ridimensionare il ColumnNumber e/o il WorksheetNumber
e/o BookNumber...solo il RowNumber. Che è la coppia di parentesi più a sinistra negli array 2D, 3D e 4D.


Gordon ha già confermato, ma dato che hai citato il mio esempio, sono costretto a rispondere anche per confermare che la tua interpretazione del mio post è corretta.

 
1005phillip:


Gordon ha già confermato, ma dal momento che hai citato il mio esempio sono costretto a rispondere anche solo per confermare che la tua interpretazione del mio post è corretta.

Quel post era destinato a rispondere al tuo, ho dimenticato di fare il tuo nome, errore mio :)

 

ok vecchio argomento, ma questo codice potrebbe aiutare qualcuno a ordinare il secondo 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;
      }
   }
}
e discendente....
 
L'alternativa all'ordinamento è fare una tabella di indice.
// 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.

Più veloce, e permette diversi tipi di dati con nomi di variabili comprensibili in diversi array monodimensionali.

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

int Buy.Ticket[] e double Buy.Price[] è più facile da capire e contiene il tipo di dati corretto.
 
LEHayes:


Sono davvero stanco e consumato dal cercare di spingere il rilascio di circa 5 strategie fuori dalla porta, quindi questo è diventato un po' un piacere invece di una necessità.

Sono disposto a fare un accordo con chiunque possa scrivere questa funzione per me. Vi darò la vostra scelta di prodotti con un anno di licenza, gratuitamente per avermi aiutato su questo e anche per l'avvio, vi darò una copia personale di questa strategia di copertura per l'uso illimitato a vita. Sono solo troppo sommerso per fare tutto e il mio team di sviluppo è pesantemente gravato dal rilascio di ciò che è già nei nostri piatti. Penso che il valore medio del sonno in tutta la squadra sia di circa 4-6 ore al giorno.

Ovviamente non sono quello che può prontamente fare questo per te, anche se suppongo che mentre sto scalando la collina su Arrays; ma sto ancora inciampando su buche e rocce nel parcheggio.... . . .

Da quello che tu e gli altri programmatori esperti qui hanno elaborato hai una soluzione, anche se un kluge: solo bisogno di qualcuno che prenda il tempo e lo faccia.

Inoltre: ci sono numerose interfacce mql 4 <=> Excel in giro. Anche se Excel v2007 ha un bug che non permette di ingrandire il foglio dopo averlo fatto: solo un piccolo inconveniente: NO! Molto triste per non averlo ancora risolto, ma nella vera moda di MS, probabilmente lo lasceranno dentro e poi lo useranno come ulteriore incentivo per comprare l'ultima v201x quando uscirà.

Se avete così tanti prodotti sullo scaffale pronti a partire, forse è il momento di cambiare cappello e uscire dalla gabbia dei codificatori per un po' e concentrarsi sul marketing e sulle vendite?

 

Russel & WHRoeder, grazie mille. Questi sarebbero di grande aiuto!
Sono un programmatore autodidatta. Non sapete come mi muovo lentamente se dovessi fare dispositivi e test da solo (che è il modo in cui vado regolarmente a capire le cose...).

@FourX : Continua a martellare... un array alla volta, alla fine ci arriverai...

 
Russell:
e scendendo....

Ciao Russell


Il tuo algoritmo suggerito sta funzionando abbastanza bene solo quando ci sono 2 o più elementi che portano lo stesso valore negli array, non è in grado di fare l'ordinamento..Ad esempio, ldSource[2][1] = 435, ldSource[3][1] = 435. Qualsiasi suggerimento per questo tipo di caso. 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'alternativa all'ordinamento è fare una tabella di indicizzazione.

Più veloce, e permette diversi tipi di dati con nomi di variabili comprensibili in diversi array monodimensionali.

int Buy.Ticket[] e double Buy.Price[] è più facile da capire e contiene il datatype corretto.

Questo è un post molto utile che copre un approccio importante che non ho visto discusso in dettaglio altrove.

Ho la necessità di costruire un indice con un ordinamento di inserimento in una situazione simile.

Posso chiedere se c'è un errore di battitura - da quanto ho capito la variabile ii esiste solo all'interno del corpo del ciclo for?

Capisco che questo potrebbe essere codice di esempio non testato o codice di lavoro leggermente modificato e non sto cercando di essere pedante ma sono curioso.

Molte grazie per i tuoi frequenti post informativi.

 

come vedo il codice #23 & #24 ha davvero bisogno di chiavi uniche per ordinare secondo loro...

la logica di #25 la sto usando io stesso a volte

Motivazione: