ordenando a matriz de 2 dimensões por segunda dimensão - página 3

[Excluído]  
cameofx wrote >>
Foi assim que eu também imaginei. a referência que citei a respeito da primeira dimensão me jogou fora...(ver post acima). Portanto, logicamente não podemos redimensionar a ColumnNumber e/ou WorksheetNumber
e/ou BookNumber...apenas o RowNumber. Que é o par mais à esquerda de suportes em arrays 2D, 3D e 4D.


Gordon já confirmou, mas como você citou meu exemplo, sou obrigado a responder também só para confirmar que sua interpretação de meu posto está correta.

 
1005phillip:


Gordon já confirmou, mas como você citou meu exemplo, sou obrigado a responder também só para confirmar que sua interpretação de meu posto está correta.

Aquele posto era para responder o seu, eu esqueci de responder o seu nome, erro meu :)

 

ok tópico antigo, mas este código pode ajudar alguém a ordenar o segundo cego.

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 descendente....
 
A alternativa à ordenação é fazer uma tabela de índices.
// 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.

Mais rápido, e permite diferentes tipos de dados com nomes de variáveis compreensíveis em diferentes matrizes unidimensionais.

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

int Buy.Ticket[] e Buy.Price[] duplo é mais fácil de entender e contém o tipo de dado correto.
 
LEHayes:


Estou realmente cansado e desgastado de tentar empurrar a liberação de cerca de 5 estratégias para fora da porta, de modo que isto se tornou um pouco de simpatia ao invés de neccessividade.

Estou disposto a fazer um acordo com qualquer pessoa que possa escrever esta função para mim. Darei a você sua escolha de produtos com uma licença de anos, de graça por me ajudar nisto e, também, darei a você uma cópia pessoal desta estratégia de hedging para uso ilimitado e gratuito por toda a vida. Estou demasiado sobrecarregado para fazer tudo isso e minha equipe de desenvolvimento está sobrecarregada com a liberação do que já está em nossas placas. Acho que o valor médio de sono em toda a equipe é de cerca de 4 a 6 horas por dia.

Obviamente, não sou eu quem pode fazer isso por você, embora suponho que enquanto estou subindo a colina em Arrays; mas ainda estou tropeçando em buracos e rochas no estacionamento.... . . .

Pelo que você tem e outros programadores conhecedores aqui têm feito, você tem uma solução, embora uma pista: só precisa de alguém que tome o tempo e o faça.

Além disso: há inúmeras interfaces mql 4 <=> Excel ao redor. Embora o Excel v2007 tenha um bug que não permitirá que a planilha seja ampliada depois que ela for feita: apenas um pequeno inconveniente: NÃO! Muito coxo por ainda não ter sido corrigido, mas na verdadeira MS, provavelmente vai deixá-lo dentro e depois usá-lo como incentivo adicional para comprar o último v201x quando ele sair.

U tem tantos produtos sentados na prateleira prontos para ir, talvez seja hora de trocar de chapéu e sair da gaiola de codificação por um tempo e se concentrar em algum marketing e vendas?

 

Russel & WHRoeder, Muito obrigado. Isso ajudaria muito!
Eu sou um programador autodidata. Você não sabe quão lento eu estou me movendo se eu fosse fazer testes por conta própria (que é como eu vou regularmente para descobrir coisas...).

@FourX : Continuar a bater... uma matriz de cada vez, você vai chegar lá eventualmente...

[Excluído]  
Russell:
e descendente....

Oi Russell


Seu algoritmo sugerido está funcionando muito bem apenas quando há 2 ou mais elementos com o mesmo valor nas matrizes, ele é incapaz de fazer a triagem ... Por exemplo, ldSource[2][1] = 435, ldSource[3][1] = 435. Qualquer sugestão para este tipo de 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:
A alternativa à ordenação é fazer uma tabela de índices.

Mais rápido, e permite diferentes tipos de dados com nomes de variáveis compreensíveis em diferentes matrizes unidimensionais.

int Buy.Ticket[] e Buy.Price[] duplo é mais fácil de entender e contém o tipo de dado correto.

Este é um post muito útil que cobre uma abordagem importante que eu não vi em detalhe em outro lugar.

Tenho a necessidade de construir um índice com um tipo de inserção em uma situação que seja semelhante.

Posso perguntar se existe uma gralha - como entendo, a variável ii só existe dentro do corpo do for loop?

Entendo que isto pode ser um código de exemplo não testado ou ligeiramente editado e não estou tentando ser pedante, mas estou curioso.

Muito obrigado por suas freqüentes postagens informativas.

 

como vejo os códigos #23 & #24 realmente precisa de chaves únicas para ordenar de acordo com eles...

as lógicas do código #25 que eu mesmo estou usando às vezes