AutoIt 之陣列索引可以從 0 起算, 也可以從 1 起算 (例如索引 0 可用來存元素個數), 但對習慣 C, Java, PHP 等 0 起始語言者可能會不習慣, 因此仍以 0 起算為宜. 元素個數 (陣列長度) 可用 AutoIt 內建的 Ubound() 函數取得. 另外, AutoIt 的使用者定義函式庫 Array.au3 提供的 _ArrayDisplay() 函數則常用來以 GUI 方式顯示陣列內容.
本系列之前的筆記參考 :
# AutoIt 學習筆記 : 基本語法
# AutoIt 內建 SciTE 的字型設定問題
# AutoIt 學習筆記 : 流程控制
一. 陣列之宣告與賦值 :
1. 先宣告再逐一賦值 :
Local $a[3] ;中括號內的整數表示元素個數
$a[0]=1 ;中括號內的整數表示元素之索引
$a[1]=2 ;中括號內的整數表示元素之索引
$a[2]=3 ;最大索引=元素個數-1
2. 宣告同時賦值 :
Local $a[3]=[1,2,3] ;等號左邊為宣告 (中括號內是元素個數), 右邊為元素值
Local $Score[5] ;宣告5個元素的1維陣列
Local $Score[$Count] ;陣列元素個數可以用已賦值之變數 ($Count必須之前就已賦值)
注意, 陣列宣告後若不賦值, 則每個元素內容預設均為空字元 NULL, 即 Chr(0)
3. 多維陣列之宣告與賦值 :
多維陣列即元素也是一個陣列, AutoIt 最多可用到 64 維陣列.
Local $Array[10][20] ;宣告 10 列 20 行之二維陣列 : 索引 (0, 0) ~ (9, 19)
$rows=UBound($Array, 1) ;傳回陣列之列數=10 (參數預設=1)
$cols=UBound($Array, 2) ;傳回陣列之行數=20
$dims=UBound($Array, 0) ;傳回陣列之維數=2
二維陣列之宣告與賦值 :
Local $NameScore[2][2]=[["John", 91], ["Peter", 91]] ;宣告同時賦值
Local $NameScore[2][2] ;先宣告
$NameScore[0]=["John", 91] ;賦值
$NameScore[1]=["Peter", 91] ;賦值
二. 拜訪陣列元素 :
顯示陣列之全部元素有兩個方法, 對於一維陣列只用一層迴圈即可 :
Local $Score[5]=[99,78,100,87,65]
Local $Str=""
For $i=0 To Ubound($Score)-1
$Str &= $Score[$i] & " " ;以空格隔開
Next
MsgBox(0,"陣列全部元素",$Str)
自訂函式庫 Array.au3 提供 _ArrayDisplay($Array) 函式可以 GUI 形式顯示陣列內容 :
#include <Array.au3>
Local $Score[5]=[99,78,100,87,65] ;宣告並賦值
_ArrayDisplay($Score, "陣列全部元素") ;以GUI顯示陣列內容
對於多維陣列, 必須用多層迴圈來依序擷取元素, 例如 :
Local $NameScore[2][2]=[["John", 91], ["Peter", 91]] ;宣告二維陣列並賦值
Local $Str="" ;初始值
For $i=0 To Ubound($NameScore,1)-1 ;外圈=拜訪列
For $j=0 To Ubound($NameScore,2)-1 ;內圈=拜訪行
$Str &= $NameScore[$i][$j] & " " ;串接元素
If $j==Ubound($NameScore,2)-1 Then $Str &= @CRLF ;行結束就串跳行符號
Next
Next
MsgBox(0,"",$Str)
三. 異質資料型態之陣列
通常陣列是一種元素資料類型均相同的資料結構, 但在AutoIt 並不禁止異質資料, 亦即元素可以是數值, 字串, 布林值等, 甚至可以是另一個陣列, 但這種用法是不宜的, 尤其元素是另一個陣列會嚴重拖慢執行速度.
#include <Array.au3>
$AnotherArray=StringToASCIIArray("ABC") ;將字串轉成ASCII碼陣列
Local $Array[4] ;宣告四個元素之陣列
$Array[0]=1 ;元素0=數值
$Array[1]=true ;元素1=布林值
$Array[2]="字串" ;元素2=字串
$Array[3]=$AnotherArray ;元素3=另一個陣列
_ArrayDisplay($Array, "陣列內容"); ;元素3無法顯示
_ArrayDisplay($Array[3], "子陣列內容"); ;元素3內容
執行後先顯示主陣列 :
可見元素 [3] 乃一子陣列, 游標移到標題按右鍵關閉視窗會執行第二個 _ArrayDisplay() 顯示子陣列 :
四. 稀疏陣列
多維陣列缺少部份元素即為稀疏陣列, AutoIt 允許稀疏陣列, 例如 :
Local $NameScore[3][3]=[["Peter",100],["John",67,82],["Mary"]]
_ArrayDisplay($NameScore);
可見 Peter 與 Mary 有不完整之元素.
五. 陣列互相賦值
兩個陣列可以互相賦值, 例如 $ArrayA=$ArrayB 中, 左邊的 A 陣列內容會與 B 陣列完全相同, 即使兩者原先維度與資料類型不同.
Local $ArrayA[2]=[123,456]
Local $ArrayB[3][3]= [["Peter",100,55],["John",67,82],["Mary",87,99]]
$ArrayA=$ArrayB ;$ArrayA 會變成 $ArrayB 之備份
_ArrayDisplay($ArrayA);
六. 使用者定義函式庫 Array.au3 中的常用函數 :
~~待續~~
沒有留言:
張貼留言