動態數組

標籤: 暫無標籤

11

更新時間: 2013-08-30

廣告

動態數組:是一種可以在任何時候改變大小的數組裝置。在 Visual Basic 中,動態數組最靈活、最方便,有助於有效管理內存。在為新數據準備數組,或者要縮減數組大小以節省內存時,這樣做是非常有用的。有時希望改變數組大小又不丟失數組中的數據。使用具有 Preserve 關鍵字的 ReDim 語句就可做到這點。例如,使用 UBound 函數引用上界,使數組擴大、增加一個元素,而現有元素的值並未丟失。\n詳細信息 :關於動態數組的更詳細信息,請參閱語言參考中的「ReDim 函數」。關於對象數組,請參閱「用對象編程」。

動態數組 -概述


數組到底應該有多大才合適,有時可能不得而知。所以希望能夠在運行時具有改變數組大小的能力。

動態數組就可以在任何時候改變大小。在 Visual Basic 中,動態數組最靈活、最方便,有助於有效管理內存。例如,可短時間使用一個大數組,然後,在不使用這個數組時,將內存空間釋放給系統。

如果不用動態數組,就要聲明一個數組,它的大小儘可能達到最大,然後再抹去那些不必要的元素。但是,如果過度使用這種方法,會導致內存的操作環境變慢。

要創建動態數組,請按照以下步驟執行:

(如果希望數組為公用數組,則)用 Public 語句聲明數組,或者,(如果希望數組為模塊級,則)在模塊級用 Dim 語句聲明數組,或者(如果希望數組為局部數組,則)在過程中用 Static 或 Dim 語句聲明數組。給數組附以一個空維數表,這樣就將數組聲明為動態數組。
Dim DynArray ()

用 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 語句時,當前存儲在數組中的值都會全部丟失。Visual Basi 重新將數組元素的值置為 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 函數」。關於對象數組,請參閱「用對象編程」。

廣告

廣告