forked from rosh/MQL5Book
108 lines
3.1 KiB
MQL5
108 lines
3.1 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| ArrayCompare.mq5 |
| |
//| Copyright 2021, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
| |
#define PRT(A) Print(#A, "=", (A))
| |
| |
#define LIMIT 10
| |
| |
//+------------------------------------------------------------------+
| |
//| Simple struct to fill in arrays with random(!) data |
| |
//+------------------------------------------------------------------+
| |
struct Dummy
| |
{
| |
int x;
| |
int y;
| |
| |
Dummy()
| |
{
| |
x = rand() / 10000;
| |
y = rand() / 5000;
| |
}
| |
};
| |
| |
//+------------------------------------------------------------------+
| |
//| Script program start function |
| |
//+------------------------------------------------------------------+
| |
void OnStart()
| |
{
| |
// array of structs
| |
Dummy a1[LIMIT];
| |
ArrayPrint(a1);
| |
/*
| |
NB: output will change on every run due to randomization
| |
| |
[x] [y]
| |
[0] 0 3
| |
[1] 2 4
| |
[2] 2 3
| |
[3] 1 6
| |
[4] 0 6
| |
[5] 2 0
| |
[6] 0 4
| |
[7] 2 5
| |
[8] 0 5
| |
[9] 3 6
| |
*/
| |
| |
// pair-wise comparison of successive elements
| |
// -1: [i] < [i + 1]
| |
// +1: [i] > [i + 1]
| |
for(int i = 0; i < LIMIT - 1; ++i)
| |
{
| |
PRT(ArrayCompare(a1, a1, i, i + 1, 1));
| |
}
| |
/*
| |
ArrayCompare(a1,a1,i,i+1,1)=-1
| |
ArrayCompare(a1,a1,i,i+1,1)=1
| |
ArrayCompare(a1,a1,i,i+1,1)=1
| |
ArrayCompare(a1,a1,i,i+1,1)=1
| |
ArrayCompare(a1,a1,i,i+1,1)=-1
| |
ArrayCompare(a1,a1,i,i+1,1)=1
| |
ArrayCompare(a1,a1,i,i+1,1)=-1
| |
ArrayCompare(a1,a1,i,i+1,1)=1
| |
ArrayCompare(a1,a1,i,i+1,1)=-1
| |
*/
| |
| |
// compare first half with second half of the array
| |
PRT(ArrayCompare(a1, a1, 0, LIMIT / 2, LIMIT / 2));
| |
/*
| |
ArrayCompare(a1,a1,0,10/2,10/2)=-1
| |
*/
| |
| |
// arrays of strings, 1D and 2D
| |
string s[] = {"abc","456","$"};
| |
string s0[][3] = {{"abc","456","$"}};
| |
string s1[][3] = {{"abc","456",""}};
| |
string s2[][3] = {{"abc","456"}}; // note the last element is omitted, null
| |
string s3[][2] = {{"abc","456"}};
| |
string s4[][2] = {{"aBc","456"}};
| |
| |
PRT(ArrayCompare(s0, s)); // s0 == s, 1D and 2D hold the same data
| |
PRT(ArrayCompare(s0, s1)); // s0 > s1, because "$" > ""
| |
PRT(ArrayCompare(s1, s2)); // s1 > s2, because "" > null
| |
PRT(ArrayCompare(s2, s3)); // s2 > s3, because of length [3] > [2]
| |
PRT(ArrayCompare(s3, s4)); // s3 < s4, because "abc" < "aBc"
| |
/*
| |
ArrayCompare(s0,s)=0
| |
ArrayCompare(s0,s1)=1
| |
ArrayCompare(s1,s2)=1
| |
ArrayCompare(s2,s3)=1
| |
ArrayCompare(s3,s4)=-1
| |
*/
| |
| |
PRT(StringCompare("abc", "aBc")); // check up
| |
/*
| |
StringCompare(abc,aBc)=-1
| |
*/
| |
| |
PRT(ArrayCompare(s0, s1, 1, 1, 1)); // second elements (index 1) are the same
| |
PRT(ArrayCompare(s1, s2, 0, 0, 2)); // first 2 elements are the same
| |
/*
| |
ArrayCompare(s0,s1,1,1,1)=0
| |
ArrayCompare(s1,s2,0,0,2)=0
| |
*/
| |
}
| |
//+------------------------------------------------------------------+
|