位元詩人 [VBScript] 程式設計教學:建立和使用陣列 (Array)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

陣列 (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 語法才會保留先前的元素。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。