【MQL5】ArrayCompare関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

ArrayCompare関数の働き・役割

ArrayCompare関数は、2つの同じ型の配列を比較してその結果を返すために使用されます。この関数は、基本データ型配列や、文字列型や動的配列を含まないカスタム構造体で構成された配列に対してのみ使用できます。複雑なクラスインジケータ文字列型を含む配列には使用できません。

この関数は、指定された配列同士が等しいか、どちらが大きいか小さいかを確認するために用いられます。例えば、2つの数値配列がある場合、それらが同じ値を持っているかどうかや、順序による違いを判別することが可能です。

ArrayCompare関数の引数について

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

ArrayCompare関数は以下の5つの引数を取ります。これらの引数を使って、比較する配列や、比較開始位置、比較する要素数を指定します。

第1引数: array1[]

array1[]は最初に比較される配列を指します。基本データ型配列か、文字列や複雑な構造体を含まないカスタム構造体配列を指定する必要があります。

第2引数: array2[]

array2[]は比較対象となる2番目の配列です。array1[]と同様に、基本データ型配列か、特定のカスタム構造体配列を指定します。

第3引数: start1 = 0

start1は、array1[]のどの要素から比較を開始するかを示す初期インデックス(通し番号)です。指定がない場合、初期値として0が使用されます。

第4引数: start2 = 0

start2は、array2[]のどの要素から比較を開始するかを示す初期インデックスです。start1と同様に、初期値は0に設定されています。

第5引数: count = WHOLE_ARRAY

countは比較する要素の数を指定します。指定がない場合、WHOLE_ARRAYが使用され、両方の配列のすべての要素が比較されます。配列内の一部のみを比較したい場合は、その要素数を指定することで、特定の範囲内での比較が可能です。

ArrayCompare関数の引数について

ArrayCompare関数は以下の5つの引数を取ります。これらの引数を使って、比較する配列や、比較開始位置、比較する要素数を指定します。

第1引数: array1[]

array1[]は最初に比較される配列を指します。基本データ型配列か、文字列や複雑な構造体を含まないカスタム構造体配列を指定する必要があります。

第2引数: array2[]

array2[]は比較対象となる2番目の配列です。array1[]と同様に、基本データ型配列か、特定のカスタム構造体配列を指定します。

第3引数: start1 = 0

start1は、array1[]のどの要素から比較を開始するかを示す初期インデックス(通し番号)です。指定がない場合、初期値として0が使用されます。

第4引数: start2 = 0

start2は、array2[]のどの要素から比較を開始するかを示す初期インデックスです。start1と同様に、初期値は0に設定されています。

第5引数: count = WHOLE_ARRAY

countは比較する要素の数を指定します。指定がない場合、WHOLE_ARRAYが使用され、両方の配列のすべての要素が比較されます。配列内の一部のみを比較したい場合は、その要素数を指定することで、特定の範囲内での比較が可能です。


ArrayCompare関数の戻り値について

ArrayCompare関数戻り値は、配列の比較結果を示す整数値です。次の4つの戻り値を持つ可能性があります。

1. -1

array1[]がarray2[]よりも小さい場合に返されます。この場合、小さいとは、array1[]の要素の値がarray2[]の要素の値に比べて小さいことを意味します。

2. 0

array1[]とarray2[]が等しい場合に返されます。すべての要素が同じ順序で等しい場合、この値が返されます。

3. 1

array1[]がarray2[]よりも大きい場合に返されます。array1[]の要素の値がarray2[]の値よりも大きいと、この結果になります。

4. -2

エラーが発生した場合に返されます。以下のような場合にこの値が返されます。

  • 配列の型が互換性がない
  • start1やstart2、またはcountが配列の範囲外の値で指定されている

このエラーが発生すると、適切な対処が必要です。

ArrayCompare関数を使う際の注意点

比較する配列は同じ型である必要があります。異なる型の配列を比較しようとすると、エラーが発生し、-2が返されます。配列要素数が異なる場合、要素数に基づいた比較が行われ、0(等しい)が返されることはありません。一方の配列が他方の配列のサブセット(ある配列がもう一方の配列の一部を含む※部分集合)であっても、等しいとは判断されず、要素数が少ない配列が小さいものと見なされます。

start1やstart2の値が配列の範囲外で指定されている場合もエラーが発生します。これらの引数には必ず配列の範囲内のインデックスを指定する必要があります。

countの値にも注意が必要です。デフォルトでは配列全体が比較されますが、特定の範囲を比較する場合は、範囲外の要素数を指定しないよう配列のサイズを確認した上で適切に設定する必要があります。

※部分集合とは、ある集合の要素が、別の集合の要素の一部として含まれている状態を指します。つまり、ある集合Aのすべての要素が、別の集合Bにも含まれている場合、集合Aは集合Bの部分集合と言います。例えば、{1, 2}は{1, 2, 3}の部分集合です。

ArrayCompare関数を使ったサンプルコードについて

//--- グローバル変数として、配列を2つ宣言する
double   ExtArrayFirst[];   // 比較対象の最初の配列
double   ExtArraySecond[];  // 比較対象の2番目の配列
 
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                     |
//+------------------------------------------------------------------+
void OnStart()
 {
  //--- ExtArrayFirstの配列サイズを10に設定する
  if(ArrayResize(ExtArrayFirst,10)!=10)
    {
    // 配列のサイズ変更が失敗した場合、エラーメッセージを出力し、処理を中断する
    Print("ArrayResize() failed for ExtArrayFirst. Error code: ",GetLastError());
    return;
    }
  
  //--- ExtArraySecondの配列サイズも10に設定する
  if(ArrayResize(ExtArraySecond,10)!=10)
    {
    // 配列のサイズ変更が失敗した場合、エラーメッセージを出力し、処理を中断する
    Print("ArrayResize() failed for ExtArraySecond. Error code: ",GetLastError());
    return;
    }
   
  //--- ExtArrayFirstとExtArraySecondの配列サイズを取得し、totalに格納する
  int total=ArraySize(ExtArrayFirst);
  
  //--- ExtArrayFirst配列には左から順に、ExtArraySecondには右から順に値を設定する
  for(int i=0, j=total-1; i<total; i++,j--)
    {
    // ExtArrayFirstには0から順に値を設定する
    ExtArrayFirst[i]=i;
    // ExtArraySecondにはtotal-1から順に値を設定する(逆順)
    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
  配列の比較結果: ExtArrayFirstはExtArraySecondより小さい(結果 = -1)
  */
 
  //--- 配列の内容を反転させて再度比較する
  for(int i=0, j=total-1; i<total; i++,j--)
    {
    // ExtArrayFirstにはtotal-1から順に値を設定する(逆順)
    ExtArrayFirst[i]=j;
    // ExtArraySecondには0から順に値を設定する
    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
  配列の比較結果: ExtArrayFirstはExtArraySecondより大きい(結果 = 1)
  */
 
  //--- 両方の配列に同じ値を入力する(左から順に)
  for(int i=0; i<total; i++)
    {
    // ExtArrayFirstに左から順に値を設定する
    ExtArrayFirst[i]=i;
    // ExtArraySecondにも同じく左から順に値を設定する
    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
  配列の比較結果: ExtArrayFirstとExtArraySecondは等しい(結果 = 0)
  */
 }

//+------------------------------------------------------------------+
//| 配列を比較して結果を表示する                                     |
//+------------------------------------------------------------------+
void ArrayComparePrint(const double &array1[], const double &array2[])
 {
  //--- ExtArrayFirst配列の内容をログに出力する
  Print("ExtArrayFirst:");
  ArrayPrint(array1);
  
  //--- ExtArraySecond配列の内容をログに出力する
  Print("ExtArraySecond:");
  ArrayPrint(array2);
  
  //--- ArrayCompare関数を使用して配列を比較し、結果を取得する
  int   res=ArrayCompare(array1,array2);
  
  //--- 比較結果に基づいてメッセージを作成する
  string res_str=(res>0 ? "ExtArrayFirstはExtArraySecondより大きい" : res<0 ? "ExtArrayFirstはExtArraySecondより小さい" : "ExtArrayFirstとExtArraySecondは等しい");
  
  //--- 比較結果をログに出力する
  PrintFormat("ArrayCompareの結果: %s (結果 = %d)\n",res_str,res);
 }

サンプルコード解説1:グローバル領域部分

//--- グローバル変数として、配列を2つ宣言する
double   ExtArrayFirst[];   // 比較対象の最初の配列
double   ExtArraySecond[];  // 比較対象の2番目の配列

このコードでは、最初に2つのグローバル変数として配列を宣言しています。これらの配列は、スクリプト内で配列の比較を行うために使用されます。

グローバル変数とは

グローバル変数とは、プログラム全体で共有され、どの関数からもアクセスできる変数のことです。このコードでは、ExtArrayFirstとExtArraySecondという2つの配列グローバル変数として定義されています。グローバル変数は、複数の関数から共通して使用されるデータを格納するために用いられます。

配列の宣言

配列の宣言としては、double型動的配列を使用しています。動的配列とは、サイズが動的に変更可能な配列を指します。double型は、小数点を含む浮動小数点数を格納するための型で、ここでは数値の比較を行うために用いられています。

  • ExtArrayFirstは、最初の配列を表し、比較対象の一つです。
  • ExtArraySecondは、2番目の配列で、もう一方の比較対象です。

この2つの配列は後述する処理内でサイズが決定され、異なる値が設定されます。それにより、配列同士の比較結果を確認できるようになります。

なぜグローバル変数を使用するのか

グローバル変数を使用する理由としては、これらの配列がプログラム全体、特にOnStart関数配列の比較を行う関数で共通して使われるからです。例えば、ArrayComparePrint関数内でもこれらの配列を参照しているため、複数の関数からアクセスできるようにする必要があります。

サンプルコード解説2:OnStart関数部分その1

//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                     |
//+------------------------------------------------------------------+
void OnStart()
 {
  //--- ExtArrayFirstの配列サイズを10に設定する
  if(ArrayResize(ExtArrayFirst,10)!=10)
    {
    // 配列のサイズ変更が失敗した場合、エラーメッセージを出力し、処理を中断する
    Print("ArrayResize() failed for ExtArrayFirst. Error code: ",GetLastError());
    return;
    }
  
  //--- ExtArraySecondの配列サイズも10に設定する
  if(ArrayResize(ExtArraySecond,10)!=10)
    {
    // 配列のサイズ変更が失敗した場合、エラーメッセージを出力し、処理を中断する
    Print("ArrayResize() failed for ExtArraySecond. Error code: ",GetLastError());
    return;
    }

OnStart関数は、MQL5スクリプトが実行された際に最初に呼び出される関数です。この部分のコードでは、配列のサイズを設定し、必要なエラーチェックを行っています。

配列のサイズ設定

まず、ExtArrayFirstとExtArraySecondの配列サイズをそれぞれ10に設定しています。この処理には、ArrayResize関数を使用しており、動的配列のサイズを変更しています。

ArrayResize関数は、動的配列のサイズを指定した大きさに変更する関数です。この関数は、成功すると新しいサイズを返しますが、失敗した場合には他の値が返されます。そのため、ArrayResize関数戻り値が期待通りであるかを確認し、正しく処理が行われたかどうかを判定しています。

エラーチェック

配列のサイズ変更に失敗した場合、Print関数を使ってエラーメッセージをエキスパートログに出力しています。この際、GetLastError関数を使って、エラーコードも一緒に出力しています。これにより、配列のサイズ変更がなぜ失敗したのかを特定するための情報が記録されます。

サイズ変更に失敗した場合、スクリプトの処理を中断するためにreturn文を使って関数から抜け出しています。

サンプルコード解説3:OnStart関数部分その2

  //--- ExtArrayFirstとExtArraySecondの配列サイズを取得し、totalに格納する
  int total=ArraySize(ExtArrayFirst);
  
  //--- ExtArrayFirst配列には左から順に、ExtArraySecondには右から順に値を設定する
  for(int i=0, j=total-1; i<total; i++,j--)
    {
    // ExtArrayFirstには0から順に値を設定する
    ExtArrayFirst[i]=i;
    // ExtArraySecondにはtotal-1から順に値を設定する(逆順)
    ExtArraySecond[i]=j;
    }

この部分では、配列のサイズを取得し、2つの配列にそれぞれ異なる方法で値を設定する処理が行われています。

配列サイズの取得

まず、ArraySize関数を使って、ExtArrayFirstの配列サイズを取得し、その結果をtotalという変数に格納しています。このtotal変数は、後のループ処理で使用されます。ここで配列サイズを取得することで、配列の全ての要素に対して正確に値を設定する準備が整います。

値の設定方法

for文を使い、2つの配列に異なる順序で値を設定しています。

  • ExtArrayFirstには、左から順に0, 1, 2, … とインデックス(通し番号)の値を設定しています。iは0から始まり、配列のサイズ(total)まで1ずつ増加していきます。
  • ExtArraySecondには、逆順にtotal-1, total-2, … と値を設定しています。j配列の最大インデックスであるtotal-1から始まり、1ずつ減少していきます。これにより、ExtArrayFirstは昇順で、ExtArraySecondは降順で値が格納されます。

インデックス変数の操作

ループ内では、ijという2つのインデックス変数を使用しています。iは通常の昇順で、jは逆順に動き、それぞれ異なる配列に対応する要素に対して値を設定しています。これにより、同じサイズの配列に異なるパターンのデータを設定することができます。

この処理の目的は、後に2つの配列を比較した際に、異なる結果が得られるようにするためです。具体的には、1つの配列には昇順のデータ、もう1つには降順のデータが格納されているため、明確に異なる配列として比較されることになります。

サンプルコード解説4:OnStart関数部分その3

 //--- 配列を比較し、その結果をログに出力する
  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
  配列の比較結果: ExtArrayFirstはExtArraySecondより小さい(結果 = -1)
  */

この部分では、2つの配列を比較し、その結果をエキスパートログに出力する処理が行われています。

配列の比較

ここでは、ArrayComparePrint関数を呼び出し、ExtArrayFirstとExtArraySecondの2つの配列を比較しています。この関数内で、ArrayCompare関数が実行され、2つの配列の比較結果が得られます。

ArrayCompare関数は、同じ型の2つの配列を比較し、その結果を整数値で返します。この値によって、次のような比較結果が得られます。

  • -1: ExtArrayFirstがExtArraySecondよりも小さい場合
  • 0: 両方の配列が等しい場合
  • 1: ExtArrayFirstがExtArraySecondより大きい場合

ログ出力

ArrayComparePrint関数は、比較結果と各配列の内容をエキスパートログに出力します。具体的には、Print関数を使用して配列の内容を表示し、さらに比較結果をフォーマットしてログに出力します。この部分のコードでは、2つの配列の値の違いに基づいて、”ExtArrayFirstはExtArraySecondより小さい” という結果がエキスパートログに出力されます。

例えば、ExtArrayFirstは0から9までの値を持ち、ExtArraySecondは9から0までの値を持っているため、比較結果として「ExtArrayFirstはExtArraySecondより小さい(結果 = -1)」と判断されます。

結果の確認

コメント内の結果例では、ExtArrayFirstとExtArraySecondの内容がログに表示され、それぞれの配列の各要素が確認できます。比較結果は、各配列要素ごとの値を順番に比較し、その差に基づいて決定されます。この例では、最初の要素から比較し、すぐにExtArrayFirstが小さいと判定され、最終的な結果が出力されています。

サンプルコード解説5:OnStart関数部分その4

  //--- 配列の内容を反転させて再度比較する
  for(int i=0, j=total-1; i<total; i++,j--)
    {
    // ExtArrayFirstにはtotal-1から順に値を設定する(逆順)
    ExtArrayFirst[i]=j;
    // ExtArraySecondには0から順に値を設定する
    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
  配列の比較結果: ExtArrayFirstはExtArraySecondより大きい(結果 = 1)

この部分では、再度2つの配列の内容を変更し、その結果を比較してエキスパートログに出力する処理が行われています。

配列の反転処理

ここで行われているのは、ExtArrayFirstとExtArraySecondの配列の内容を再び設定し直す処理です。前の部分では、ExtArrayFirstが昇順、ExtArraySecondが降順で値が設定されていましたが、今回はその逆に設定されます。

  • ExtArrayFirstには逆順の値(total-1から0まで)が設定されます。これは、ループ変数jがtotal-1から始まり、1ずつ減少していくことで実現されます。
  • ExtArraySecondには、昇順の値(0からtotal-1まで)が設定されます。ループ変数iが0から始まり、1ずつ増加していくことで、この処理が行われます。

この処理により、前回とは逆に、ExtArrayFirstには降順、ExtArraySecondには昇順のデータが設定され、配列の内容が反転した状態になります。

配列の比較と結果の出力

配列の内容が反転された後、再びArrayComparePrint関数を呼び出して、両方の配列を比較します。比較結果は、今度はExtArrayFirstが大きいと判定されるため、結果として「ExtArrayFirstはExtArraySecondより大きい(結果 = 1)」というメッセージがエキスパートログに出力されます。

結果の確認

コメント内の結果では、ExtArrayFirstが9から0までの値を持ち、ExtArraySecondが0から9までの値を持つため、比較結果としてExtArrayFirstが大きいと判断されます。このように、配列の内容を動的に変更して比較することで、ArrayCompare関数の挙動を確認しています。

サンプルコード解説6:OnStart関数部分その5

 //--- 両方の配列に同じ値を入力する(左から順に)
  for(int i=0; i<total; i++)
    {
    // ExtArrayFirstに左から順に値を設定する
    ExtArrayFirst[i]=i;
    // ExtArraySecondにも同じく左から順に値を設定する
    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
  配列の比較結果: ExtArrayFirstとExtArraySecondは等しい(結果 = 0)
  */
 }

この部分では、2つの配列に同じ値を設定し、その後に配列を比較して結果をログに出力しています。ここでの目的は、両方の配列が完全に同じ内容を持った場合に、ArrayCompare関数がどのような結果を返すかを確認することです。

値の設定方法

ループを使い、ExtArrayFirstとExtArraySecondの両方に、左から順に同じ値を設定しています。具体的には、ループ変数iを利用して、配列の各要素にそのインデックスの値を設定します。

  • ExtArrayFirstには、0からtotalまでの値が順番に設定されます。
  • ExtArraySecondにも同様に、0からtotalまでの同じ値が設定されます。

これにより、両方の配列は同じ内容(0, 1, 2, …, total-1)を持つようになります。

配列の比較と結果の出力

配列に同じ値が設定された後、ArrayComparePrint関数を使って2つの配列を比較します。ここでは、両方の配列が同じ内容を持っているため、ArrayCompare関数戻り値は0になります。これは、配列が等しいことを意味します。

その結果として、エキスパートログに「ExtArrayFirstとExtArraySecondは等しい(結果 = 0)」というメッセージが出力されます。このように、ArrayCompare関数は2つの配列が等しい場合に0を返すため、この実験によりその動作を確認することができます。

結果の確認

コメント内の結果例では、ExtArrayFirstとExtArraySecondの両方が同じ値(0.00000から9.00000まで)を持っており、その結果、配列が等しいと判定されています。この結果により、配列列が同一の内容であることが確認できます。

サンプルコード解説6:ArrayComparePrint関数(オリジナル関数)部分

//+------------------------------------------------------------------+
//| 配列を比較して結果を表示する                                     |
//+------------------------------------------------------------------+
void ArrayComparePrint(const double &array1[], const double &array2[])
 {
  //--- ExtArrayFirst配列の内容をログに出力する
  Print("ExtArrayFirst:");
  ArrayPrint(array1);
  
  //--- ExtArraySecond配列の内容をログに出力する
  Print("ExtArraySecond:");
  ArrayPrint(array2);
  
  //--- ArrayCompare関数を使用して配列を比較し、結果を取得する
  int   res=ArrayCompare(array1,array2);
  
  //--- 比較結果に基づいてメッセージを作成する
  string res_str=(res>0 ? "ExtArrayFirstはExtArraySecondより大きい" : res<0 ? "ExtArrayFirstはExtArraySecondより小さい" : "ExtArrayFirstとExtArraySecondは等しい");
  
  //--- 比較結果をログに出力する
  PrintFormat("ArrayCompareの結果: %s (結果 = %d)\n",res_str,res);
 }

ArrayComparePrint関数は、2つの配列を比較して、その結果をログに出力するためのオリジナル関数です。この関数では、配列の内容を表示し、ArrayCompare関数を使って2つの配列を比較し、結果をフォーマットして出力します。以下では、各引数関数の動作について解説します。

引数の解説

ArrayComparePrint関数には2つの引数が渡されています。それぞれの引数について詳しく見ていきます。

  • array1[]: 配列の1つ目(ExtArrayFirst)を指す引数です。この配列の内容がログに出力され、ArrayCompare関数で比較されます。
  • array2[]: 配列の2つ目(ExtArraySecond)を指す引数です。この配列もarray1[]と同様に、内容がログに出力され、比較の対象となります。

どちらの引数も、double型配列の参照として受け取られており、ArrayCompare関数での比較のために使われます。参照渡し(&)によって、配列のコピーを行わずに、元の配列にアクセスしています。

配列の内容を表示する処理

まず、Print関数を使用して、それぞれの配列(array1[], array2[])の内容をログに出力しています。

  • Print(“ExtArrayFirst:”): ExtArrayFirst配列の内容を表示するためのヘッダメッセージです。
  • ArrayPrint(array1): ArrayPrint関数を使って、配列の全要素を表示します。これにより、配列内のすべての値がエキスパートログに出力されます。

同様に、ExtArraySecond配列の内容もPrint関数ArrayPrint関数を使ってログに出力します。これにより、両方の配列が比較される前に、その内容が確認できます。

配列の比較

次に、ArrayCompare関数を使って2つの配列を比較しています。ArrayCompare関数は、同じ型の配列を比較し、その結果を整数値で返します。結果は以下の通りです。

  • res > 0: array1がarray2より大きい場合
  • res < 0: array1がarray2より小さい場合
  • res == 0: 両方の配列が等しい場合

比較結果のメッセージ作成

三項演算子を使って、比較結果に基づいたメッセージ(res_str)を作成しています。比較結果に応じて、次の3つのメッセージのいずれかが選ばれます。

  • array1がarray2より大きい場合:「ExtArrayFirstはExtArraySecondより大きい」
  • array1がarray2より小さい場合:「ExtArrayFirstはExtArraySecondより小さい」
  • 両方の配列が等しい場合:「ExtArrayFirstとExtArraySecondは等しい」

結果のログ出力

最後に、PrintFormat関数を使って、比較結果をエキスパートログに出力します。この関数は、フォーマットされた文字列を作成し、その結果をログに出力するために使われています。

  • PrintFormat(“ArrayCompareの結果: %s (結果 = %d)\n”, res_str, res): ここで、比較結果(res_str)と数値(res)をログに出力します。これにより、比較の内容と具体的な結果がエキスパートログに表示されます。

ArrayComparePrint関数は、配列の内容をエキスパートログに表示し、ArrayCompare関数を使って2つの配列を比較し、その結果をログに出力する関数です。引数として受け取った2つの配列を順に処理し、比較結果に基づいて適切なメッセージを出力する構造となっています。

タイトルとURLをコピーしました