ArraySwap
Hoán đổi nội dung của hai mảng động cùng loại. Đối với mảng đa chiều, số lượng phần tử trong tất cả các chiều trừ chiều đầu tiên phải khớp nhau.
cpp
bool ArraySwap(
void& array1[], // mảng đầu tiên
void& array2[] // mảng thứ hai
);
1
2
3
4
2
3
4
Tham số
array1[]
[in][out] Mảng kiểu số.
array2[]
[in][out] Mảng kiểu số.
Giá trị trả về
Trả về true nếu thành công, nếu không trả về false. Trong trường hợp này, GetLastError() trả về mã lỗi ERR_INVALID_ARRAY.
Ghi chú
Hàm chấp nhận các mảng động cùng loại và cùng số chiều trừ chiều đầu tiên. Đối với các kiểu số nguyên, dấu không được tính đến, tức là char == uchar.
Ví dụ:
cpp
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- mảng để lưu trữ báo giá
double source_array[][8];
double dest_array[][8];
MqlRates rates[];
//--- lấy dữ liệu của 20 nến cuối cùng trên khung thời gian hiện tại
int copied=CopyRates(NULL,0,0,20,rates);
if(copied<=0)
{
PrintFormat("CopyRates(%s,0,0,20,rates) thất bại, lỗi=%d",
Symbol(),GetLastError());
return;
}
//--- đặt kích thước mảng cho lượng dữ liệu đã sao chép
ArrayResize(source_array,copied);
//--- điền mảng source_array[] bằng dữ liệu từ rates[]
for(int i=0;i<copied;i++)
{
source_array[i][0]=(double)rates[i].time;
source_array[i][1]=rates[i].open;
source_array[i][2]=rates[i].high;
source_array[i][3]=rates[i].low;
source_array[i][4]=rates[i].close;
source_array[i][5]=(double)rates[i].tick_volume;
source_array[i][6]=(double)rates[i].spread;
source_array[i][7]=(double)rates[i].real_volume;
}
//--- hoán đổi dữ liệu giữa source_array[] và dest_array[]
if(!ArraySwap(source_array,dest_array))
{
PrintFormat("ArraySwap(source_array,rate_array_2) thất bại, mã lỗi=%d",GetLastError());
return;
}
//--- đảm bảo rằng mảng nguồn đã trở thành zero sau khi hoán đổi
PrintFormat("ArraySwap() hoàn tất: ArraySize(source_array)=%d",ArraySize(source_array));
//--- hiển thị dữ liệu của mảng đích dest_array[]
ArrayPrint(dest_array);
}
1
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
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