ArrayCompare

Возвращает результат сравнения двух массивов одинакового типа. Может использоваться для сравнения массивов простых типов или пользовательских структур, не имеющих сложных объектов - то есть не содержащих строк, динамических массивов, классов или других структур содержащих сложные объекты.

int  ArrayCompare(
   const void&  array1[],            // первый массив
   const void&  array2[],            // второй массив
   int          start1=0,            // начальное смещение в первом массиве
   int          start2=0,            // начальное смещение во втором массиве
   int          count=WHOLE_ARRAY    // количество элементов для сравнения
   );

Параметры

array1[]

[in]  Первый массив.

array2[]

[in]  Второй массив.

start1=0

[in]  Начальный индекс элемента в первом массиве, с которого начнется сравнение. По умолчанию стартовый индекс - 0.

start2=0

[in]  Начальный индекс элемента во втором массиве, с которого начнется сравнение. По умолчанию стартовый индекс - 0.

count=WHOLE_ARRAY

[in]  Количество элементов, которые нужно сравнить. По умолчанию в сравнении участвуют все элементы обоих массивов (count=WHOLE_ARRAY).

Возвращаемое значение

  • -1, если array1[] меньше array2[]
  • 0, если array1[] и array2[] равны
  • 1, если array1[] больше array2[]
  • -2, при возникновении ошибки из-за несовместимости типов сравниваемых массивов, или при значениях start1, start2 или count, приводящих к выходу за пределы массива.

Примечание

При разных размерах сравниваемых массивов и с указанным значением count=WHOLE_ARRAY для случая, когда один массив является точным подмножеством другого, функция не вернёт 0 (массивы не будут считаться равными). В этом случае будет возвращен результат сравнения размеров этих массивов: -1, если размер array1[] меньше размера  array2[] или 1 в противном случае.

Пример:

//--- глобальные переменные 
double   ExtArrayFirst[];
double   ExtArraySecond[];
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- устанавливаем размеры массивам
   if(ArrayResize(ExtArrayFirst,10)!=10)
     {
      Print("ArrayResize() failed for ExtArrayFirst. Error code: ",GetLastError());
      return;
     }
   if(ArrayResize(ExtArraySecond,10)!=10)
     {
      Print("ArrayResize() failed for ExtArraySecond. Error code: ",GetLastError());
      return;
     }
     
//--- в цикле заполняем массивы значениями индексов i и j
   int total=ArraySize(ExtArrayFirst);
   for(int i=0j=total-1i<totali++,j--)
     {
      //--- массив ExtArrayFirst заполняем слева-направо
      //--- массив ExtArraySecond заполняем справа-налево
      ExtArrayFirst[i]=i;
      ExtArraySecond[i]=j;
     }
//--- сравним массивы и распечатаем в журнале результат
   ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
   /*
   Результат:
   ExtArrayFirst:
   0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000
   ExtArraySecond:
   9.00000 8.00000 7.00000 6.00000 5.00000 4.00000 3.00000 2.00000 1.00000 0.00000
   Result ArrayCompare(): ExtArrayFirst is smaller than ExtArraySecond (result = -1)
   */
   
//--- теперь перевернём массивы
//--- в цикле заполняем массивы значениями индексов i и j
   for(int i=0j=total-1i<totali++,j--)
     {
      //--- массив ExtArrayFirst заполняем справа-налево
      //--- массив ExtArraySecond заполняем слева-направо
      ExtArrayFirst[i]=j;
      ExtArraySecond[i]=i;
     }
//--- сравним массивы и распечатаем в журнале результат
   ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
   /*
   Результат:
   ExtArrayFirst:
   9.00000 8.00000 7.00000 6.00000 5.00000 4.00000 3.00000 2.00000 1.00000 0.00000
   ExtArraySecond:
   0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000
   Result ArrayCompare(): ExtArrayFirst is larger than ExtArraySecond (result = 1)
   */
   
//--- теперь заполним массивы в одном направлении
//--- в цикле заполняем массивы значениями индекса i
   for(int i=0i<totali++)
     {
      //--- оба массива заполняем слева-направо
      ExtArrayFirst[i]=i;
      ExtArraySecond[i]=i;
     }
//--- сравним массивы и распечатаем в журнале результат
   ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
   /*
   Результат:
   ExtArrayFirst:
   0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000
   ExtArraySecond:
   0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000
   Result ArrayCompare(): ExtArrayFirst and ExtArraySecond are equal (result = 0)
   */
  }
//+------------------------------------------------------------------+
//| Сравнение и вывод результата                                     |
//+------------------------------------------------------------------+
void ArrayComparePrint(const double &array1[], const double &array2[])
  {
   //--- распечатаем заголовок и содержимое массивов
   Print("ExtArrayFirst:");
   ArrayPrint(array1);
   Print("ExtArraySecond:");
   ArrayPrint(array2);
   //--- сравним массивы и распечатаем результат сравнения
   int    res=ArrayCompare(array1,array2);
   string res_str=(res>0 ? "ExtArrayFirst is larger than ExtArraySecond" : res<0 ? "ExtArrayFirst is smaller than ExtArraySecond" : "ExtArrayFirst and ExtArraySecond are equal");
   PrintFormat("Result ArrayCompare(): %s (result = %d)\n",res_str,res);
  }
//+------------------------------------------------------------------+