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).

반환 값

  • array1[]이 array2[]보다 작으면 -1
  • array1[]이 array2[]와 같으면 0
  • array1[]이 array2[]보다 크면 1
  • 비교 배열 유형이 호환되지 않아 오류가 발생하거나 start1, start2 또는 카운트 값이 배열 외부에 속하는 경우 -2.

참고

배열의 크기가 다르면 0(배열은 동일한 것으로 간주되지 않음)을 반환하지 않으며, 배열이 다른 배열의 신뢰할 수 있는 하위 집합인 경우 count=WHOLE_ARRAY를 반환합니다. 이 경우 해당 배열의 크기를 비교한 결과가 반환되며, -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);
   /*
   Result:
   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);
   /*
   Result:
   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);
   /*
   Result:
   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);
  }
//+------------------------------------------------------------------+