ArraySwap

Troca entre si o conteúdo de duas matrizes do tipo dinâmico. Para matrizes multidimensionais, o número de elementos em todas as dimensões, excepto o primeiro, tem de ser o mesmo.

bool  ArraySwap(
   void&  array1[],      // primeira matriz
   void&  array2[]       // segunda matriz
   );

Parâmetros

array1[]

[in][out]  Matriz numérica.

array2[]

[in][out]  Matriz numérica.

Valor de retorno

Retorna true em caso de sucesso, caso contrário, false. Neste caso, GetLastError() retorna o código de erro ERR_INVALID_ARRAY.

Observação

A função implementa matrizes dinâmicas do mesmo tipo e as mesmas dimensões, exceto a primeira. Para tipos inteiros, o sinal é ignorado, ou seja, char==uchar)

Exemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- matrizes para armazenar cotações
   double source_array[][8];
   double   dest_array[][8];
   MqlRates rates[];
//--- obtemos dados dos últimos 20 candles no timeframe atual
   int copied=CopyRates(NULL,0,0,20,rates);
   if(copied<=0)
     {
      PrintFormat("CopyRates(%s,0,0,20,rates) failed, error=%d",
                  Symbol(),GetLastError());
      return;
     }
//--- definimos o tamanho da matriz pelo número de dados copiados
   ArrayResize(source_array,copied);
//--- preenchemos a matriz rate_array_1[] com dados a partir de 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;
     }
//--- realizamos o intercâmbio de dados entre source_array[] e dest_array[]
   if(!ArraySwap(source_array,dest_array))
     {
      PrintFormat("ArraySwap(source_array,rate_array_2) failed, error code=%d",GetLastError());
      return;
     }
//--- verificamos que, depois do intercâmbio, o tamanho da fonte-matriz se tornou zero
   PrintFormat("ArraySwap() done: ArraySize(source_array)=%d",ArraySize(source_array));
//--- exibimos os dados do receptor de matriz dest_array[]
   ArrayPrint(dest_array);
  }

Veja também

ArrayCopy, ArrayFill, ArrayRange, ArrayIsDynamic