2次元配列の2次元によるソート - ページ 3

 
cameofx wrote>>
これらは私もそれを想像していた方法です。私が引用した最初の次元に関する参照は私を投げた...(上記の投稿を参照してください)。つまり、論理的には、ColumnNumber や WorksheetNumber、BookNumber のサイズを変更することはできません。
とかBookNumberのサイズを変更することはできないのです...RowNumberだけです。2D、3D、4D配列では、一番左の括弧のペアとなります。


Gordonはすでに確認していますが、あなたが私の例を引用したので、私の投稿のあなたの解釈が正しいことを確認するために、私も回答せざるを得なくなりました。

 
1005phillip:


ゴードンはすでに確認済みですが、私の例を引用されたので、私の投稿の解釈が正しいかどうか確認するために、私も回答せざるを得ません。

この投稿はあなたへの返信のつもりでしたが、あなたの名前を出すのを忘れていました、私のミスです :)

 

OK 古い話題ですが、このコードは2つ目の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;
      }
   }
}
と下降していく...。
 
ソートの代わりにインデックステーブルを作ることができる。
// 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.

より高速で、異なる1次元配列に理解しやすい変数名を持つ異なるデータ型が可能です。

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

int Buy.Ticket[]とdouble Buy.Price[]の方が分かりやすく、正しいデータ型が含まれています。
 
LEHayes:


私は約5つの戦略のリリースをドアから押し出そうとして本当に疲れて消耗しているので、これは必要なことではなく、少しうれしいことになりました。私は、この関数を書いてくれる方と取引したいと思います。この関数を書いてくれる人には、数年間のライセンスで好きな製品を選んでもらい、さらに、このヘッジ戦略の個人的なコピーを無料で生涯無制限に使用できるようにします。私はそれをすべて行うにはあまりにも沼にはまり、私の開発チームはすでに私たちのプレートにあるものを解放するために重い負担を負っています。チーム全体の平均睡眠時間は、1日4~6時間だと思います。

もちろん、私はあなたのためにこれを簡単にできるような人間ではありませんが、私はArraysの丘を登っているようなものだと思います。. . .

さらに、mql 4 <=> Excelのインターフェースは数多く存在します。ただし、Excel v2007には、作成後にシートを拡大できないバグがあります:ちょっとだけ不便です。とはいえしかし、MSの真のやり方として、おそらくこのバグを残したまま、最新のv201xが出たときにそれを購入するための追加誘因として使うつもりです。

このように、多くの製品を 棚に並べて準備しているのですから、そろそろ帽子を替えて、しばらくの間、コーディングの檻から出て、マーケティングや販売に集中する時期かもしれませんね。

 

Russel & WHRoeder、どうもありがとうございます。これらはとても助かります
私は独学でプログラマをやっています。私は独学でプログラマーをやっているので、もし私が自分でデバイスを作ったりテストをしたりしたら、どれだけ動きが 遅くなるかわからないでしょう(私は定期的に何かを理解するためにそうしているのですが...)。

@FourX : パンパン叩き続けてください...一回一回の配列で、いずれはたどり着けます...

 
Russell:
と下降していく...。

こんにちは、ラッセルです。


あなたの提案したアルゴリズムはかなりうまくいっていますが、2つ以上の要素が配列内で同じ値を運んでいるとき、それはソートを行うことができません ...例えば、ldSource[2][1] = 435, ldSource[3][1] = 435。このような場合、何か提案はありますか?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:
ソートの代わりにインデックステーブルを作るという方法があります。

より速く、そして理解しやすい変数名で異なるデータ型を異なる一次元配列で使用することができます。

int Buy.Ticket[]とdouble Buy.Price[]は理解しやすく、正しいデータ型を含んでいます。

これは、私が他の場所で詳細に議論されているのを見たことがない重要な アプローチをカバーする、非常に有用な投稿です。

私も似たような状況で、挿入ソートでインデックスを構築する必要があります。

私が理解しているように、変数iiはforループの本体内にのみ存在するのでしょうか。

これは未試験のサンプルコードか、軽く編集されたワーキングコードである可能性があることを理解しており、衒うつもりはありませんが、私は好奇心でいっぱいです。

いつも有益な記事をありがとうございます。

 

23と24のコードは、ソートするためにユニークなキーが必要なようです...

25のロジックは私自身も時々使っています。