Mảng 
thực chất là một tập hợp các biến có cùng kiểu dữ liệu được gọi chung bằng một tên. Các biến trong một mảng 
thường được gọi là "phần tử" và được truy cập đến bởi chỉ mục. Các mảng 
có thể có một hay nhiều chiều, thông dụng nhất là mảng một chiều (danh sách) và 
mảng hai chiều (ma trận gồm hàng và cột). 
MẢNG MỘT CHIỀU (DANH 
SÁCH)
Mảng 
một chiều là dãy gồm nhiều mục liên tiếp nhau. 
Bạn cứ hình dung nó như là  một cái danh sách. Cũng có 
số thứ tự, cũng có thông tin (dữ liệu) ứng với thứ tự đó.
Hình 
thức cơ bản cho việc khai báo mảng một chiều là 
:
<scope>  <var_name>[<size>]
§         <scope> 
 :  cho biết đây là biến Local, Global hay Dim
§         <var_name> :  là tên biến đại diện cho tất cả các phần tử trong 
mảng. Tuân thủ theo các qui tắc đặt tên như khai báo 
biến.
§         <size>  :  cho biết có tối đa bao nhiêu phần tử sẽ chứa 
trong mảng.
Ví 
dụ như, để khai báo một mảng toàn cục có 100 phần tử gọi tên là List và sau đó 
gán các giá trị cho mảng, ta sử dụng câu lệnh 
:
Global  
List[100]
List[0] 
= "Ant"
List[1] 
= "Bird"
List[2] 
= "Cat"
.....
List[99] 
= "Zebra"
Trong 
AutoIt, chỉ mục đầu tiên của mảng phải bắt đầu từ 0. Với ví dụ 
trên, nếu ta dùng List[0], List[1] là ta đang truy cập 
đến phần tử thứ nhất, thứ hai. Dùng List[99] là ta đang 
truy cập đến phần tử thứ 100. Việc sử dụng chỉ mục vượt quá 
chỉ mục tối đa cho phép khi khai báo là không hợp lệ.
Muốn 
lấy một giá trị từ một phần tử trong mảng, ta phải biết được chỉ mục của phần tử 
chứa giá trị đó. 
Ví dụ :
$animal 
= $List[2]   ; $animal sẽ chứa chuỗi "Cat"
MẢNG HAI CHIỀU (MA 
TRẬN)
Một 
mảng hai chiều chính là một ma trận được tạo thành bởi hàng và 
cột. 
Nếu bạn đã biết qua Excel thì bảng tính trong Excel chính là 
một ma trận. Hình thức chung cho việc khai báo 
mảng hai chiều cũng tương tự như mảng một chiều, nhưng có thêm việc khai báo chỉ 
mục thứ hai. Trong mảng hai chiều, chỉ mục thứ nhất cho biết hàng và chỉ mục thứ 
hai là cột.. Cụ thể là 
:
<scope> <var_name> 
[<size_row>][<size_column>]
Trong 
đó :
- <scope> cũng dùng để chỉ định phạm vi
 - <var_name> chỉ định tên mảng
 - <size_row> chỉ định số dòng tối đa
 - <size_column> chỉ định số cột tối đa
 
Ví 
dụ :
Dim 
$matrix[2][3]    ; tạo một ma trận có 2 dòng và 3 
cột
$matrix[0][0] = 2
$matrix[0][1] = 4
$matrix[0][2] = 6
$matrix[1][0] = 1
$matrix[1][1] = 3
$matrix[1][2] = 5
Để 
truy cập đến một phần tử trong mảng ta cũng sử dụng chỉ mục cho dòng và 
cột. 
Ví dụ :
; 
đang truy cập đến phần tử ở dòng thứ nhất, cột thứ 
hai.
$n 
= $matrix[0][1]  ; $n sẽ bằng 4
CÁC VẤN ĐỀ LIÊN 
QUAN
Vấn 
đề 1 : Khởi tạo giá trị cho mảng 
Khi 
khai báo một mảng bạn cũng có thể khởi tạo giá trị cho các phần tử bên trong 
mảng. 
Các giá trị khi khởi tạo cho mảng phải được nằm trong cặp dấu 
ngoặc vuông [ ], và mỗi giá trị phải được ngăn cách bởi dấu phẩy. Đối với mảng hai chiều thì cần thêm một cặp dấu ngoặc vuông khác để 
rào các giá trị có cùng chỉ mục dòng. Ví dụ 
:
Dim 
$array[5] = [10, 20, 30, 40, 50]
Local 
$test[4] = ["a", "Hello", 500, 4.55]
Global 
$Grid[2][3] = [["sun", "moon", "earth"], [1000, cos(0), 
sqrt(900)]]
Vấn 
đề 2 : Lấy tổng số phần tử hiện có trong mảng 
Sẽ 
có không ít tình huống bạn tiếp nhận và xử lý một mảng có nhiều phần tử bên 
trong. 
Tuy nhiên có một rắc rối là bạn không biết mảng này hiện đang có bao nhiêu phần 
tử, vì nó thay đổi theo chu kỳ hay một lý do nào đó. 
Với trường hợp này, sử dụng hàm UBound là một lời giải vì nó sẽ cho biết một mảng 
được chỉ định có bao nhiêu phần tử. Cú pháp như sau 
:
                
UBound( 
$array, $dimension)
Trong 
đó,
$array  : là tên của một biến mảng 
$dimension  : cho biết cần lấy ở chiều thứ mấy. Mặc định là 1, tức mảng một chiều. Nếu gán 
bằng 0, thì UBound không trả về tổng số phần tử hiện có, mà sẽ trả về một số 
tương ứng với số chiều của mảng.
Ví 
dụ :
Dim 
$myArray[10][20]         ;element 0,0 to 
9,19
$rows 
= UBound($myArray)     ; lấy chiều thứ nhất
$cols 
= UBound($myArray, 2)  ; lấy chiều thứ hai
$dims 
= UBound($myArray, 0)  ; lấy số chiều của 
mảng
$info 
= "This Array has " & $dims &" dimension(s) : " 
&@CRLF & _
$rows 
& " rows, " & $cols & " columns"
MsgBox(0, 
"Msg of Array", $info)
Dấu 
_ đặt ở cuối dòng lệnh $info = ... cho biết, phần tiếp theo của dòng lệnh hiện hành được viết ở dòng kế tiếp. Thông 
thường việc này xảy ra do một lệnh quá dài, khi viết trên một dòng thì vượt quá 
trang màn hình, rất khó quan sát. Cho nên cách này được dùng 
như một giải pháp.
Vấn 
đề 3 : Thiết lập lại kích thước của một 
mảng
Theo 
qui định, nếu muốn sử dụng một biến mảng thì trước đó phải khai báo tên, số 
chiều và kích thước tối đa để chứa các phần tử. 
Trong trường hợp bạn muốn định lại kích thước  cho mảng 
đó (tăng hoặc giảm kích thước) thì việc bạn cần làm là sử dụng từ khóa ReDim .  Cú pháp chung 
:
ReDim  
$array 
[new index 1] ... [new index n]
$array  :  là tên của mảng cần định lại kích thước
New 
index  :  kích thước mới cho tổng số phần tử đối đa sẽ 
có trong mảng. [new index n] áp dụng cho chiều thứ n 
của mảng.
Bạn 
xem ví dụ sau để hiểu rõ hơn cách thức làm việc. 
Đoạn mã bên dưới sẽ minh họa việc thiết lập lại kích thước tối 
đa cho mảng một chiều.
; 
khai báo kích thước ban đầu
Dim 
$a[5] = [2, 4, 6, 8, 10]
ConsoleWrite("Before 
:  ")
For 
$i=0 to UBound($a)-1
      
ConsoleWrite($a[$i] & "  ")
Next
; 
Định lại kích thước mảng
ReDim 
$a[3]
ConsoleWrite(@crlf 
& "After rediming  : " )
For 
$i=0 To 2
      
ConsoleWrite($a[$i] & "  ")
Next
Đầu 
tiên ta khai báo mảng $a có năm phần tử, sau đó dùng vòng lặp For thứ nhất để in nội dung ra console. Đến dòng lệnh ReDim 
$a[3] sẽ định lại kích thước của mảng từ ban đầu là  
năm phần tử xuống còn ba phần tử. Khi kích thước mới nhỏ hơn 
kích thước cũ, thì phần nội dung phía sau sẽ bị cắt bỏ. Cho nên vòng lặp 
For thứ hai sẽ chỉ in các giá trị 2, 4 và 6.
Chú 
ý : Khi thiết lập lại kích thước cho một biến mảng, nếu 
bạn thay đổi số chiều của mảng từ mảng một chiều thành hai chiều, hoặc ngược 
lại, thì tất cả dữ liệu đang có trong mảng sẽ bị xóa hoàn toàn.
Vấn 
đề 4 : Các chú ý
+  
Chỉ 
mục của mảng có thể là một biến hoặc một biểu thức, sao cho nó trả về một chỉ 
mục hợp lệ. Vì thế bạn có thể làm nhiều cách khác nhau để truy 
xuất đến các phần tử bên trong mảng. Cũng xin nhắc lại rằng,  tất cả các mảng đều có 0 làm chỉ mục cho phần tử thứ 
nhất.
Ví 
dụ sau minh họa cho việc khởi tạo các giá trị ngẫu nhiên cho mảng một và hai 
chiều.
; 
khởi tạo và in giá trị cho mảng một chiều
Dim  
$a[10]
ConsoleWrite("---- 
A list : "& @crlf)
For 
$i=0 To 9
      
$a[$i] = Int(Random(0, 100))
      
ConsoleWrite($a[$i] & "  ")
Next
; 
khởi tạo và in giá trị cho mảng hai chiều
Dim 
$m [4] [5]
ConsoleWrite(@crlf 
& "---- A matrix : " & @crlf)
For 
$i=0 To 3
      
For $j=0 to 4
            
$m[$i][$j] = Int(Random(0,10))
            
ConsoleWrite($m[$i][$j] & "  ")
      
Next
      
ConsoleWrite(@crlf)
Next
+  
Theo 
lý thuyết, các phần tử trong mảng phải có cùng kiểu dữ liệu, hoặc là số, hoặc là 
chuỗi. Nhưng trong AutoIt, một mảng có thể chứa mọi thứ, từ một số cho đến một 
boolean. Nói đơn giản là có thể chứa các phần tử có 
kiểu dữ liệu khác nhau. Tuy nhiên, điều này không được khuyến 
khích. Ví dụ :
$arr[0] = 1
$arr[1] = true
$arr[2] = "my text"
$arr[3] = $another_array
+  
Một 
mảng trong AutoIt chỉ cho phép chứa tối đa 224 (16 777 216) phần tử.  









:)
:-)
:))
=))
:(
:-(
:((
:d
:-d
@-)
:p
:o
:>)
(o)
[-(
:-?
(p)
:-s
(m)
8-)
:-t
:-b
b-(
:-#
=p~
:-$
(b)
(f)
x-)
(k)
(h)
(c)
cheer



:D
Trả lờiXóa