用循環操作數組
可以用 For 循環嵌套有效的處理多維數組。例如,在 MatrixA 中基於每個元素在數組中的位置為其賦值:
Dim I As Integer, J As Integer
Static MatrixA(1 To 10, 1 To 10) As Double
For I = 1 To 10
For J = 1 To 10
MatrixA (I, J) = I * 10 + J
Next J
Next I
詳細信息 關於循環的詳細信息,請參閱本章後面的“循環結構”部分。
動態數組
數組到底應該有多大才合適,有時可能不得而知。所以希望能夠在運行時具有改變數組大小的能力。
動態數組就可以在任何時候改變大小。在 Visual Basic 中,動態數組最靈活、最方便,有助於有效管理內存。例如,可短時間使用一個大數組,然後,在不使用這個數組時,將內存空間釋放給系統。
如果不用動態數組,就要聲明一個數組,它的大小盡可能達到最大,然後再抹去那些不必要的元素。但是,如果過度使用這種方法,會導致內存的操作環境變慢。
要創建動態數組,請按照以下步驟執行:
1. (如果希望數組為公用數組,則)用 Public 語句聲明數組,或者(如果希望數組為模塊級,則)在模塊級用 Dim 語句聲明數組,或者(如果希望數組為局部數組,則)在過程中用 Static 或 Dim 語句聲明數組。給數組附以一個空維數表,這樣就將數組聲明為動態數組。
Dim DynArray ()
2. 用 ReDim 語句分配實際的元素個數。
ReDim DynArray (X + 1)
ReDim 語句只能出現在過程中。與 Dim 語句、Static 語句不同,ReDim 語句是一個可執行語句,由於這一語句,應用程序在運行時執行一個操作。ReDim 語句支持這樣的語法,它與固定數組中使用的語法相同。對於每一維數,每個 ReDim 語句都能改變元素數目以及上下界。但是,數組的維數不能改變。
ReDim DynArray (4 to 12)
例如,用第一次聲明在模塊級所建立的動態數組 Matrix1:
Dim Matrix1 () As Integer
然後,在過程中給數組分配空間:
Sub CalcValuesNow ()
.
.
.
ReDim Matrix1 (19, 29)
End Sub
這裡的 ReDim 語句給 Matrix 分配一個 20 × 30 的整數矩陣(元素總大小為 600)。還有一個辦法,用變量設置動態數組的邊界:
ReDim Matrix1 (X, Y)
注意 您可以將字符串賦值給大小可變的字節數組。一個字節數組也可以被賦值給一個可變長的字符串。一定要注意字符串中的字節數會隨平台而變化。同一個字符串在 Unicode 平台上的字節數是它在非Unicode 平台上的兩倍。
保留動態數組的內容
每次執行 ReDim 語句時,當前存儲在數組中的值都會全部丟失。VisualBasic 重新將數組元素的值置為 Empty(對 Variant 數組)、置為 0(對Numeric 數組)、置為零長度字符串(對 String 數組)或者置為 Nothing(對於對象的數組)。
在為新數據准備數組,或者要縮減數組大小以節省內存時,這樣做是非常有用的。有時希望改變數組大小又不丟失數組中的數據。使用具有 Preserve關鍵字的 ReDim 語句就可做到這點。例如,使用 UBound 函數引用上界,使數組擴大、增加一個元素,而現有元素的值並未丟失:
ReDim Preserve DynArray (UBound (DynArray) + 1)
在用 Preserve 關鍵字時,只能改變多維數組中最後一維的上界;如果改變了其它維或最後一維的下界,那麼運行時就會出錯。所以可這樣編程:
ReDim Preserve Matrix (10, UBound (Matrix, 2) + 1)
而不可這樣編程:
ReDim Preserve Matrix (UBound (Matrix, 1) + 1, 10)
詳細信息 關於動態數組的更詳細信息,請參閱語言參考中的“ReDim 函數”。關於對象數組,請參閱第九章“用對象編程”。