ArrayCompare
Hàm trả về kết quả so sánh hai mảng cùng kiểu. Nó có thể được dùng để so sánh các mảng của kiểu đơn giản hoặc cấu trúc tùy chỉnh không chứa đối tượng phức tạp, tức là các cấu trúc tùy chỉnh không chứa chuỗi, mảng động, lớp và các cấu trúc khác có đối tượng phức tạp.
int ArrayCompare(
const void& array1[], // mảng thứ nhất
const void& array2[], // mảng thứ hai
int start1=0, // độ lệch ban đầu trong mảng thứ nhất
int start2=0, // độ lệch ban đầu trong mảng thứ hai
int count=WHOLE_ARRAY // số lượng phần tử để so sánh
);
2
3
4
5
6
7
Tham số
array1[]
[in] Mảng thứ nhất.
array2[]
[in] Mảng thứ hai.
start1=0
[in] Chỉ số ban đầu của phần tử trong mảng thứ nhất, từ đó bắt đầu so sánh. Chỉ số bắt đầu mặc định là 0.
start2=0
[in] Chỉ số ban đầu của phần tử trong mảng thứ hai, từ đó bắt đầu so sánh. Chỉ số bắt đầu mặc định là 0.
count=WHOLE_ARRAY
[in] Số lượng phần tử cần so sánh. Mặc định, tất cả phần tử của cả hai mảng tham gia so sánh (count=WHOLE_ARRAY).
Giá trị trả về
- -1, nếu
array1[]
nhỏ hơnarray2[]
- 0, nếu
array1[]
bằngarray2[]
- 1, nếu
array1[]
lớn hơnarray2[]
- -2, nếu xảy ra lỗi do sự không tương thích của kiểu của các mảng được so sánh hoặc nếu các giá trị
start1
,start2
hoặccount
dẫn đến việc vượt ra ngoài mảng.
Ghi chú
Hàm sẽ không trả về 0 (các mảng sẽ không được coi là bằng nhau) nếu các mảng khác nhau về kích thước và count=WHOLE_ARRAY
trong trường hợp một mảng là tập hợp con chính xác của mảng kia. Trong trường hợp này, kết quả so sánh kích thước của các mảng sẽ được trả về: -1, nếu kích thước của array1[]
nhỏ hơn kích thước của array2[]
, ngược lại là 1.
Ví dụ:
//--- biến toàn cục
double ExtArrayFirst[];
double ExtArraySecond[];
//+------------------------------------------------------------------+
//| Hàm bắt đầu chương trình script |
//+------------------------------------------------------------------+
void OnStart()
{
//--- đặt kích thước mảng
if(ArrayResize(ExtArrayFirst,10)!=10)
{
Print("ArrayResize() thất bại cho ExtArrayFirst. Mã lỗi: ",GetLastError());
return;
}
if(ArrayResize(ExtArraySecond,10)!=10)
{
Print("ArrayResize() thất bại cho ExtArraySecond. Mã lỗi: ",GetLastError());
return;
}
//--- điền các mảng với giá trị của chỉ số i và j trong vòng lặp
int total=ArraySize(ExtArrayFirst);
for(int i=0, j=total-1; i<total; i++,j--)
{
//--- điền mảng ExtArrayFirst từ trái sang phải
//--- điền mảng ExtArraySecond từ phải sang trái
ExtArrayFirst[i]=i;
ExtArraySecond[i]=j;
}
//--- so sánh các mảng và in kết quả vào log
ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
/*
Kết quả:
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
Kết quả ArrayCompare(): ExtArrayFirst nhỏ hơn ExtArraySecond (kết quả = -1)
*/
//--- bây giờ hãy đảo ngược các mảng
//--- điền các mảng với giá trị của chỉ số i và j trong vòng lặp
for(int i=0, j=total-1; i<total; i++,j--)
{
//--- điền mảng ExtArrayFirst từ phải sang trái
//--- điền mảng ExtArraySecond từ trái sang phải
ExtArrayFirst[i]=j;
ExtArraySecond[i]=i;
}
//--- so sánh các mảng và in kết quả vào log
ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
/*
Kết quả:
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
Kết quả ArrayCompare(): ExtArrayFirst lớn hơn ExtArraySecond (kết quả = 1)
*/
//--- bây giờ hãy điền các mảng theo một hướng
//--- điền các mảng với giá trị của chỉ số i trong vòng lặp
for(int i=0; i<total; i++)
{
//--- điền cả hai mảng từ trái sang phải
ExtArrayFirst[i]=i;
ExtArraySecond[i]=i;
}
//--- so sánh các mảng và in kết quả vào log
ArrayComparePrint(ExtArrayFirst,ExtArraySecond);
/*
Kết quả:
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
Kết quả ArrayCompare(): ExtArrayFirst và ExtArraySecond bằng nhau (kết quả = 0)
*/
}
//+------------------------------------------------------------------+
//| So sánh và hiển thị kết quả |
//+------------------------------------------------------------------+
void ArrayComparePrint(const double &array1[], const double &array2[])
{
//--- in tiêu đề và nội dung của các mảng
Print("ExtArrayFirst:");
ArrayPrint(array1);
Print("ExtArraySecond:");
ArrayPrint(array2);
//--- so sánh các mảng và in kết quả so sánh
int res=ArrayCompare(array1,array2);
string res_str=(res>0 ? "ExtArrayFirst lớn hơn ExtArraySecond" : res<0 ? "ExtArrayFirst nhỏ hơn ExtArraySecond" : "ExtArrayFirst và ExtArraySecond bằng nhau");
PrintFormat("Kết quả ArrayCompare(): %s (kết quả = %d)\n",res_str,res);
}
//+------------------------------------------------------------------+
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96