純量與陣列變數

在大多數情況下,宣告變數後,只會為它指派單一值。包含單一值的變數稱為純量變數。有時為了方便,可將多個相關值指派給單一變數。您可以建立可包含一系列值的變數。這類變數稱為陣列變數。陣列變數與純量變數的宣告方式相同,不同的是,陣列變數的宣告會在變數名稱後方加上括號 ( )

在下列範例中,宣告了一個包含 11 個元素的單一維度陣列:

Dim A(10)

雖然括號中顯示的數字是 10,但 BSL 中的所有陣列都是零基。因此,此陣列包含 11 個元素。在零基陣列中,陣列元素數一律是括號中顯示的數字加一。這類陣列稱為固定大小陣列。

您可以使用索引,將資料指派給陣列中的每個元素。從零開始到 10 結束,資料可指派給陣列的元素,如下所示:

     A(0) = 256
        A(1) = 324
        A(2) = 100
         . . .
        A(10) = 55

同樣地,你也可以使用索引,從您要的任何陣列元素中擷取資料。

例如:

SomeVariable = A(8)

陣列不限於單一維度。您可以在括號中以逗號分隔陣列的大小數字,以宣告多個維度。在下列範例中,MyTable 變數是由 6 列與 11 欄所組成的二維陣列:

Dim MyTable(5,10)

在二維陣列中,第一個數字一律是列數,第二個數字是欄數。

您也可以宣告一個在指令碼執行期間,大小會變更的陣列。這類陣列稱為動態陣列。此陣列最初是在程序中,使用 Dim 陳述式或 ReDim 陳述式來宣告。不過,對於動態陣列,不會在括號內指定大小或維度數。

例如:

Dim MyArray()
ReDim AnotherArray() ' Illegal as no dimension specified
ReDim AnotherArray(3)

若要使用動態陣列,之後必須使用 ReDim 決定維度數和每個維度的大小。在下列範例中,ReDim 會將動態陣列的初始大小設為 25。後續的 ReDim 陳述式會將陣列大小調整為 30,但同時使用 Preserve 關鍵字,在調整大小時保留陣列的內容。

ReDim MyArray(25)
 . . . 
ReDim Preserve MyArray(30)

調整動態陣列大小的次數並無限制,不過如果您縮小陣列,會遺失被排除元素中的資料。

下列範例說明純量變數和陣列變數的用法:

範例 1

Dim B
B = 200   ' Assigns the value 200 to the variable B.

範例 2

Dim A(3)   ' Declares a single-dimension array with 4 elements 0 to 3 indexes.
' Assigning values to each element of the array.
A(0) = 256
A(1) = 324
A(2) = 100
' Retrieving a value from the array.
Dim SomeVariable
SomeVariable = A(1)   ' Retrieves the value at index 1.

範例 3

Dim MyArray()   ' Declares a dynamic array.
ReDim MyArray(25)   ' Sets the initial size of the dynamic array to 25 elements.
' Assigning values to the dynamic array.
MyArray(0) = "First"
MyArray(25) = "Last"
' Resizing the dynamic array and preserving contents.
ReDim Preserve MyArray(30)   ' Resizes the array to 30 elements and preserves existing data.

範例 4

Dim AnotherArray()
ReDim AnotherArray(10)   ' Initial size of 10 elements.
' Assigning values to the array.
AnotherArray(0) = "Alpha"
AnotherArray(10) = "Omega"

' Resizing the array multiple times.
ReDim Preserve AnotherArray(20)
AnotherArray(20) = "NewElement"
ReDim Preserve AnotherArray(5)   ' Reduces the size of the array (data beyond index 5 is lost).