ArrayCompare

この関数は 2 つの同型の配列を比較した結果を返します。基本データ型 または 複合型オブジェクトを使用しないカスタム構造体、つまり文字列型動的配列、クラスや他の複合オブジェクトで出来た構造体を含まないカスタム構造体です。

int  ArrayCompare(
  const void&  array1[],            // 1番目の配列
  const void&  array2[],            // 2 番目の配列
  int          start1=0,            // 1番目の配列の初期オフセット
  int          start2=0,            // 2 番目の配列の初期オフセット
  int         count=WHOLE_ARRAY   // 比較される要素の数
  );

パラメータ

array1[]

[in]  1番目の配列

array2[]

[in]  2 番目の配列

start1=0

[in]  比較開始点となる、1番目の配列内の要素の初期インデックス。デフォルトの開始インデックスは0です。

start2=0

[in]  比較開始点となる、2 番目の配列内の要素の初期インデックス。デフォルトの開始インデックスは0です。

count=WHOLE_ARRAY

[in]  比較される要素の数デフォルトでは両方の配列の全ての要素が比較されます(count=WHOLE_ARRAY)。

戻り値

  • -1( array1[] が array2[] より小さい)
  • 0( array1[] とarray2[] が等しい)
  • 1( array1[] が array2[] より大きい)
  • -2(両配列の型の非互換性や start1、start2 または count 値が配列の範囲外にあることによってエラーが発生)

注意事項

配列のサイズが異なり、いずれかの配列がもう 1 つの配列の忠実なサブセットであって、かつ count= WHOLE_ARRAY である場合、0 が返されず、両配列は等しいとみなされません。この場合、両配列のサイズ比較による戻り値は、array1[] のサイズが array2[] のサイズより小さい場合は -1 でそれ以外は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=0, j=total-1; i<total; i++,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=0, j=total-1; i<total; i++,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)
  */
 
//--- 次に配列に1方向に入力する
//--- ループ内で配列にiのインデックスの値を入力する
  for(int i=0; i<total; i++)
    {
    //--- 両配列に左から右へ入力する
    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);
 }
//+------------------------------------------------------------------+