ArrayCompare

Aynı tipteki iki dizinin karşılaştırma sonucuna dönüş yapar. Basit tipli veya karmaşık nesneler içermeyen özel yapılı (dizgiler, dinamik diziler, sınıflar ve karmaşık nesneli diğer yapıları içermeyen) dizilerin karşılaştırılmasında kullanılabilir.

int  ArrayCompare(
   const void&  array1[],            // birinci dizi
   const void&  array2[],            // ikinci dizi
   int          start1=0,            // ilk dizideki başlangıç konumu
   int          start2=0,            // ikinci dizideki başlangıç konumu
   int          count=WHOLE_ARRAY    // karşılaştırmada kullanılacak eleman sayısı
   );

Parametreler

array1[]

[in]  Birinci dizi.

array2[]

[in]  İkinci dizi.

start1=0

[in]  Birinci dizide karşılaştırmanın başlayacağı ilk indis. Ön tanımlı başlangıç indisi - 0.

start2=0

[in]  İkinci dizide karşılaştırmanın başlayacağı ilk indis. Ön tanımlı başlangıç indisi - 0.

count=WHOLE_ARRAY

[in]  Karşılaştırılacak elemanların sayısı. Varsayılan olarak iki dizinin de tüm elemanları karşılaştırmaya katılır (count=WHOLE_ARRAY).

Dönüş değeri

  • -1, array1[] değeri array2[] değerinden küçükse
  • 0, array1[] değeri array2[] değerine eşitse
  • 1, array1[] değeri array2[] değerinden büyükse
  • -2, karşılaştırılan dizilerin tiplerinin uyumsuzluğu nedeniyle bir hata oluşursa veya start1[], start2[] ya da count değerleri dizinin dışına düşüyorsa.

Not

Eğer bir dizi, diğerinin birebir altkümesi ise ve büyüklük ile count=WHOLE_ARRAY değerleri farklıysa, fonksiyon sıfır değerine dönüş yapmayacaktır (diziler eşit sayılmayacaklardır). Dizilerin büyüklük karşılaştırmalarının sonucu, array1[] değeri array2[] değerinden küçükse '-1', değil ise '1' dönüşü yapılır.

Örnek:

//--- global değişkenler
double   ExtArrayFirst[];
double   ExtArraySecond[];
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- dizi büyüklüklerini ayarla
   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;
     }
     
//--- dizileri bir döngü içerisinde i ve j indekslerinin değerleri ile doldur
   int total=ArraySize(ExtArrayFirst);
   for(int i=0j=total-1i<totali++,j--)
     {
      //--- ExtArrayFirst dizisini soldan sağa doldur
      //--- ExtArraySecond dizisini sağdan sola doldur
      ExtArrayFirst[i]=i;
      ExtArraySecond[i]=j;
     }
//--- dizileri karşılaştır ve sonucu günlüğe yazdır
   ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
   /*
  Sonuç:
   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)
   */
   
//--- şimdi dizileri çevirelim
//--- dizileri bir döngü içerisinde i ve j indekslerinin değerleri ile doldur
   for(int i=0j=total-1i<totali++,j--)
     {
      //--- ExtArrayFirst dizisini sağdan sola doldur
      //--- ExtArraySecond dizisini soldan sağa doldur
      ExtArrayFirst[i]=j;
      ExtArraySecond[i]=i;
     }
//--- dizileri karşılaştır ve sonucu günlüğe yazdır
   ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
   /*
  Sonuç:
   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)
   */
   
//--- şimdi dizileri tek bir yönde dolduralım
//--- dizileri bir döngü içerisinde i indeksinin değerleriyle doldur
   for(int i=0i<totali++)
     {
      //--- her iki diziyi de soldan sağa doldur
      ExtArrayFirst[i]=i;
      ExtArraySecond[i]=i;
     }
//--- dizileri karşılaştır ve sonucu günlüğe yazdır
   ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
   /*
  Sonuç:
   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)
   */
  }
//+------------------------------------------------------------------+
//| Karşılaştır ve sonucu görüntüle                                  |
//+------------------------------------------------------------------+
void ArrayComparePrint(const double &array1[], const double &array2[])
  {
   //--- dizilerin başlığını ve içeriğini yazdır
   Print("ExtArrayFirst:");
   ArrayPrint(array1);
   Print("ExtArraySecond:");
   ArrayPrint(array2);
   //--- dizileri karşılaştır ve karşılaştırma sonucunu yazdır
   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);
  }
//+------------------------------------------------------------------+