ArraySwap

交换相同类型两个动态数组的内容。对于多维数组而言,除了第一个之外,所有维度中的元素数量都应该匹配。

bool  ArraySwap(

   void&  array1[],      //第一个数组

   void&  array2[]       //第二个数组

   );

参数

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);

//--- 使用来自rates[]的数据填写rate_array_1[]数组

   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;

     }

//--- 确保原数组在交换之后变为零

   PrintFormat("ArraySwap() done: ArraySize(source_array)=%d",ArraySize(source_array));

//--- 展示dest_array[]目标数组的数据

   ArrayPrint(dest_array);

  }

另见

ArrayCopyArrayFillArrayRangeArrayIsDynamic