2 boyutlu diziyi ikinci boyuta göre sıralama - sayfa 3

 
cameofx wrote >>
Bunlar da benim hayal ettiğim şekilde. birinci boyutla ilgili alıntıladığım referans beni çok şaşırttı..(yukarıdaki yazıya bakın). Bu nedenle, ColumnNumber ve/veya WorksheetNumber'ı mantıksal olarak yeniden boyutlandıramıyoruz.
ve/veya BookNumber..sadece RowNumber. Hangisi 2B, 3B ve 4B dizilerde en soldaki parantez çiftidir.


Gordon zaten onayladı, ancak örneğimi alıntıladığınız için, mesajımı yorumlamanızın doğru olduğunu onaylamak için de yanıt vermek zorundayım.

 
1005phillip :


Gordon zaten onayladı, ancak örneğimi alıntıladığınız için, mesajımı yorumlamanızın doğru olduğunu onaylamak için de yanıt vermek zorundayım.

O gönderi seninkine cevap vermek içindi, adını yazmayı unuttum, benim hatam :)

 

tamam eski konu, ancak bu kod birisinin ikinci kararmayı sıralamasına yardımcı olabilir.

 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 ;
      }
   }
}
ve inen....
 
Sıralamanın alternatifi bir dizin tablosu yapmaktır.
 // 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.

Daha hızlıdır ve farklı tek boyutlu dizilerde anlaşılabilir değişken adlarıyla farklı veri türlerine izin verir.

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

int Buy.Ticket[] ve double Buy.Price[] daha kolay anlaşılır ve doğru veri türünü içerir.
 
LEHayes :


Yaklaşık 5 stratejinin serbest bırakılmasını kapıdan dışarı atmaya çalışmaktan gerçekten yoruldum ve yıprandım, bu yüzden bu bir gereklilik yerine biraz hoş bir şey oldu.

Bu işlevi benim için yazabilecek herkesle anlaşma yapmaya hazırım. Bu konuda bana yardımcı olduğunuz için size ücretsiz olarak yıllık lisanslı ürün seçiminizi vereceğim, size bu riskten korunma stratejisinin kişisel bir kopyasını ücretsiz sınırsız ömür boyu kullanım için vereceğim. Hepsini yapamayacak kadar dalgınım ve geliştirme ekibim, halihazırda plakalarımızda olanı serbest bırakmakla ağır bir şekilde yükleniyor. Bence ekip genelinde ortalama uyku değeri günde yaklaşık 4 ila 6 saat.

Açıkçası bunu sizin için kolayca yapabilecek kişi ben değilim, ancak sanırım Arrays'de tepeye tırmanırken; ama hala park yerindeki çukurlara ve kayalara takılıyorum.... . . .

Sahip olduklarınızdan ve buradaki diğer bilgili programcılardan elde ettiğiniz bilgilere göre, bir çözümünüz olsa da, bir çözümünüz var: sadece zaman ayıracak ve yapacak birine ihtiyacınız var.

Ek olarak: Etrafta çok sayıda mql 4 <=> Excel arabirimi vardır. Excel v2007'de, yapıldıktan sonra sayfanın büyütülmesine izin vermeyen bir hata olsa da: KÜÇÜK bir rahatsızlık: HAYIR! Henüz düzeltmemiş olmak çok kötü, ama gerçek MS tarzında, muhtemelen onu bırakacak ve daha sonra çıktığında en son v201x'i satın almak için ek teşvik olarak kullanacak.

Rafta o kadar çok ürününüz var, belki de şapka değiştirmenin ve bir süreliğine kodlama kafesinden çıkmanın ve biraz pazarlama ve satışa odaklanmanın zamanı geldi mi?

 

Russel & WHRoeder, Çok teşekkür ederim. Bunlar çok yardımcı olacaktır!
Ben kendi kendini yetiştirmiş bir programcıyım. Kendi başıma cihaz ve testler yaparsam ne kadar yavaş hareket ettiğimi bilemezsiniz (bu, düzenli olarak bir şeyleri anlamaya nasıl giderim ...).

@FourX: Dövüşmeye devam edin ... her seferinde bir dizi, sonunda oraya varacaksınız ...

 
Russell :
ve inen....

Merhaba Russell


Önerilen algoritmanız sadece dizilerde aynı değeri taşıyan 2 veya daha fazla eleman olduğunda oldukça iyi çalışıyor, sıralamayı yapamıyor ..Eg, ldSource[2][1] = 435, ldSource[3][ 1] = 435. Bu tür bir durum için herhangi bir öneri. Teşekkür



   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 :
Sıralamanın alternatifi bir dizin tablosu yapmaktır.

Daha hızlıdır ve farklı tek boyutlu dizilerde anlaşılabilir değişken adlarıyla farklı veri türlerine izin verir.

int Buy.Ticket[] ve double Buy.Price[] daha kolay anlaşılır ve doğru veri türünü içerir.

Bu, başka bir yerde ayrıntılı olarak tartışıldığını görmediğim önemli bir yaklaşımı kapsayan çok faydalı bir gönderi.

Benzer bir durumda ekleme sıralamalı bir dizin oluşturmaya ihtiyacım var.

Bir yazım hatası olup olmadığını sorabilir miyim - anladığım kadarıyla ii değişkeni yalnızca for döngüsünün gövdesinde var mı?

Bunun denenmemiş örnek kod veya hafifçe düzenlenmiş çalışma kodu olabileceğini anlıyorum ve bilgiç olmaya çalışmıyorum ama merak ediyorum.

Sık sık bilgilendirici yazılarınız için çok teşekkürler.

 

#23 ve #24 kodunu gördüğüm gibi, onlara göre sıralamak için gerçekten benzersiz anahtarlara ihtiyacı var ...

#25'in mantığını bazen kendimi kullanıyorum