ArrayCompare

函数返回相同类型两个数组的比较结果。它可以用来比较简单类型或没有 复杂对象的自定义结构的数组,自定义结构不可以包括 字符串动态数组,类和其他没有复杂对象的结构。

int  ArrayCompare(
   const void&  array1[],            // 第一数组
   const void&  array2[],            // 第二数组
   uint         start1=0,            // 第一数组的初始偏差
   uint         start2=0,            // 第二数组的初始偏差
   uint         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=WHOLE_ARRAY不相同,那么函数不会返回0(数组将不会认为相等)。在这种情况下,比较数组大小的结果将返回: -1,如果array1[]大小小于array2[] 大小, 否则为1。

示例:

//--- 全局变量
double   ExtArrayFirst[];
double   ExtArraySecond[];
 
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
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++)
     {
      //--- fill both arrays from left to right
      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);
  }
//+------------------------------------------------------------------+