陣列 (array) 是一種線性的 (linear) 資料結構,可利用整數為索引 (index) 存取其中的元素;由於微軟 (Microsoft) 未詳細提及陣列內部的實作,我們只要以高階抽象的想法使用陣列即可。
在 VBScript 的陣列有兩種,固定大小的陣列再可伸長的動態陣列,兩者使用方式大抵相同,只差在是否可延長。
以下範例建立一個固定長度為 4 的陣列,並存取其元素:
' Create a fix-sized array.
Dim arr(3)
' Mutate the elements in arr.
arr(0) = "Batch"
arr(1) = "VBScript"
arr(2) = "JScript"
arr(3) = "PowerShell"
' Retrieve an element from arr.
WScript.Echo arr(2)
表面上看起來陣列的長度是 3,但 VBScript 的陣列是從 0 計算,故實際長度為 4。很少有程式語言的陣列是這樣設計,最好把參數視為最大索引值而非陣列大小。
使用 For Each ... Next
敘述可以走訪陣列:
' Declare a fixed array.
Dim arr(3)
' Mutate the elements in arr.
arr(0) = "Batch"
arr(1) = "VBScript"
arr(2) = "JScript"
arr(3) = "PowerShell"
' Iterate through arr.
For Each e in arr
WScript.Echo e
Next
我們也可以用計數器來走訪陣列,這時候要用 UBound
函式取得計數器的上限:
' Declare a fixed array.
Dim arr(3)
' Mutate the elements in arr.
arr(0) = "Batch"
arr(1) = "VBScript"
arr(2) = "JScript"
arr(3) = "PowerShell"
' Iterate through arr.
For i = 0 to UBound(arr)
WScript.Echo arr(i)
Next
除了一維陣列,我們也可以建立多維陣列。如下例:
Dim mtx(1, 2)
mtx(0, 0) = 1
mtx(0, 1) = 2
mtx(0, 2) = 3
mtx(1, 0) = 4
mtx(1, 1) = 5
mtx(1, 2) = 6
For i = 0 to UBound(mtx)
For j = 0 to UBound(mtx, 2)
WScript.StdOut.Write mtx(i, j)
If j < UBound(mtx, 2) Then
WScript.StdOut.Write ", "
End If
Next
WScript.StdOut.Write vbNewLine
Next
在我們這個例子中,由於我們要控制換行字元出現的時機,我們不用 WScript.Echo
而改用 WScript.StdOut.Write
來輸出資料。
前述的陣列大小固定,相較起來,動態陣列的特色在於可動態改變其大小,使用實例如下:
' Declare a dynamic array.
ReDim arr(3)
' Mutate the elements in arr.
arr(0) = "Batch"
arr(1) = "VBScript"
arr(2) = "JScript"
arr(3) = "PowerShell"
' Extend `arr`.
ReDim Preserve arr(6)
' Mutate the elements in arr again.
arr(4) = "Visaul Basic"
arr(5) = "C#"
arr(6) = "F#"
' Iterate through arr.
For Each e in arr
WScript.Echo e
Next
使用 ReDim
語法可建立動態陣列。在伸長動態陣列時,要用 ReDim Preserve
語法才會保留先前的元素。