Funkcje tablicowe:   ArrayCompare()

Funkcja int ArrayCompare() zwraca wynik porównania dwóch tablic jednakowego typu. Do porównywania można używać tablic typów podstawowych lub struktur własnych, które nie mają obiektów złożonych, tj. nie zawierających tekst (typ string ), tablic dynamicznych, klas. Więcej informacji można znaleźć w specyfikacji MQL4.

Wartości, które zwraca funkcja:

  • -2 - błąd niezgodności typów tablic lub jeśli pozycje początkowe lub zakres porównywania powoduje wyjście poza granice tablic,
  • -1 - tablica 1 jest mniejsza niż tablica 2,
  •  0 - tablica 1 i tablica 2 są równe,
  •  1 - tablica 1 jest większa niż tablica 2.

Przykład 1

Skrypt do porównywania dwóch tablic.

#property strict
void OnStart()
  {
//---
   int array_1[] = {1, 2, 3, 4, 5}; // tablica 1
   int array_2[] = {1, 2, 3, 4, 5}; // tablica 2
   int start_1   = 0;               /* indeks elementu początkowego
                                       tablicy array_1, wartość domyślna */

   int start_2   = 0;               /* indeks elementu początkowego
                                       tablicy array_2, wartość domyślna */

   int count     = WHOLE_ARRAY;     // cała tablica, wartość domyślna

//--- porównać dwie tablice
   int compare = ArrayCompare(array_1, array_2, start_1, start_2, count);

//--- wyświetlić wynik
   if(compare == 0)
      Print("Tablice array_1 i array_2 są równe.");
   else
      Print("Tablice array_1 i array_2 nie są równe.");
  }

Rys. 1. Przykład stosowania funkcji ArrayCompare().


Przykład 2

Skrypt do porównywania dwóch różnych tablic.

#property strict
void OnStart()
  {
//---
   int array_1[] = {1, 20};          // tablica 1
   int array_2[] = {1, 2, 333, 444}; // tablica 2

//--- porównać dwie tablice
   int compare = ArrayCompare(array_1, array_2);

//--- wyświetlić wynik
   Print("Wynik porównania = ",compare);
   switch(compare)
     {
      case -2:
         Print("Błąd w porównywaniu tablic array_1 i array_2.");
         break;
      case -1:
         Print("Tablica array_1 jest mniejsza niż tablica array_2.");
         break;
      case 0:
         Print("Tablice array_1 i array_2 są równe.");
         break;
      case 1:
         Print("Tablica array_1 jest większa niż tablica array_2.");
         break;
     }
  }

Rys. 2. Przykład stosowania funkcji ArrayCompare().


W powyższym skrypcie funkcja wskazała, że tablica array_1 jest większa niż tablica array_2, dlatego że funkcja po kolei porównuje odpowiednie elementy tablic i jeśli wartość któregoś z nich jest większa to ta tablica i zostanie uznana za większą. Liczba 20 (array_1[1]) jest większa niż 2 (array_2[1]), dalsze elementy tablic nie są już porównywane, dlatego array_1 jest większa niż array_2.