ArraySwap

同じ型の2つの動的配列の内容を交換します。多次元配列の場合、最初の次元を除くすべての次元の要素の数は一致する必要があります。

bool  ArraySwap(
  void&  array1[],      // 1番目の配列
  void&  array2[]       // 2番目の配列</
  );

パラメータ

array1[]

[in][out]  数値型配列

array2[]

[in][out]  数値型配列

戻り値

成功の場合はtrue、それ以外の場合はfalse 。この場合、GetLastError()はエラーコードERR_INVALID_ARRAYを返します。

注意事項

この関数は、最初のものを除いて、同じ型および同じ次元の動的配列を受け入れます。整数型の場合、符号は無視されます(char==uchar)。

例:

//+------------------------------------------------------------------+
//| スクリプトプログラムを開始する関数                                          |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 相場を格納する配列
  double source_array[][8];
  double   dest_array[][8];
  MqlRates rates[];
//--- 現在の時間枠で最後の20本のローソク足のデータを取得する
  int copied=CopyRates(NULL,0,0,20,rates);
  if(copied<=0)
    {
    PrintFormat("CopyRates(%s,0,0,20,rates) failed, error=%d",
                Symbol(),GetLastError());
    return;
    }
//--- コピーされたデータ量の配列サイズを設定する
  ArrayResize(source_array,copied);
//--- rate_array_1[]配列にrates[]のデータを書き入れる
  for(int i=0;i<copied;i++)
    {
     source_array[i][0]=(double)rates[i].time;
     source_array[i][1]=rates[i].open;
     source_array[i][2]=rates[i].high;
     source_array[i][3]=rates[i].low;
     source_array[i][4]=rates[i].close;
     source_array[i][5]=(double)rates[i].tick_volume;
     source_array[i][6]=(double)rates[i].spread;
     source_array[i][7]=(double)rates[i].real_volume;
    }
//--- source_array[]とdest_array[]のデータを互いに取り替える
  if(!ArraySwap(source_array,dest_array))
    {
    PrintFormat("ArraySwap(source_array,rate_array_2) failed, error code=%d",GetLastError());
    return;
    }
//--- スワップ後にソース配列が0になっていることを確認する
  PrintFormat("ArraySwap() done: ArraySize(source_array)=%d",ArraySize(source_array));
//--- dest_array []出力先配列のデータを表示する
  ArrayPrint(dest_array);
 }

参照

ArrayCopyArrayFillArrayRangeArrayIsDynamic