ReDim 陳述式 (Visual Basic)
重新配置陣列變數的儲存空間。
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
組件
詞彙 |
定義 |
Preserve |
選擇項。 修飾詞 (Modifier),在只變更最後一個維度的大小時,用於保留現有陣列中的資料。 |
name |
必要項。 陣列變數的名稱。 請參閱宣告項目名稱 (Visual Basic)。 |
boundlist |
必要項。 重新定義之陣列中每個維度的範圍清單。 |
備註
您可以使用 ReDim 陳述式,變更已宣告之陣列中一個或多個維度的大小。 如果陣列很大,而且不再需要其中的部分元素,則 ReDim 可以藉由減少陣列大小,釋放記憶體。 另一方面,如果程式碼判斷陣列需要更多元素,ReDim 也可以加入元素。
ReDim 陳述式只適用於陣列, 它對於純量 (只包含單一值的變數)、集合或結構是無效的。 請注意,如果您將變數宣告為型別 Array,則 ReDim 陳述式不會有足夠的型別資訊可以建立新陣列。
您只能在程序層次使用 ReDim。 這表示變數的「宣告內容」必須是程序,但不得為原始程式檔 (Source File)、命名空間 (Namespace)、介面、類別 (Class)、結構、模組或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)。
規則
**修飾詞。**您只能指定 Preserve 修飾詞,而且指定修飾詞時無法省略 ReDim 關鍵字。
多個變數您可以調整同一個宣告陳述式中多個陣列變數的大小,方法是指定每個陣列變數的 name 和 boundlist 部分。 變數之間以逗號 ( , ) 來分隔。
陣列界限boundlist 中的每個項目都可以指定該維度的下限 (Lower Bound) 和上限 (Upper Bound)。 不論您是否指定下限,下限一律為零。 上限則為該註標 (Subscript) 的最高可能值,而非維度的長度 (此為上限加一)。 每個註標的值不同,有可能從零到上限值。
boundlist 中的維度數目必須符合陣列的原始陣序。
空白陣列您可以使用 -1 宣告陣列維度的上限。 這表示陣列是空白的,但不是 Nothing (Visual Basic)。 如需詳細資訊,請參閱Visual Basic 中的陣列。 但是,Visual Basic 程式碼無法成功存取這類陣列。 如果您嘗試這麼做,在執行期間會發生 IndexOutOfRangeException 錯誤。
資料型別ReDim 陳述式無法變更陣列變數 (或其元素) 的資料型別。
初始設定:ReDim 陳述式無法提供陣列元素新的初始設定值。
**陣序。**ReDim 陳述式無法變更陣列的陣序 (維度的數目)。
**使用 Preserve 調整大小。**如果使用 Preserve,您只能調整陣列中最後一個維度的大小,而其他的維度就必須指定成現有陣列中維度的大小。
例如,如果陣列只有一個維度,您便可以調整該維度的大小,同時仍保留所有陣列的內容,這是因為所變更的是最後一個,也是唯一的維度。 不過,如果陣列有兩個或更多的維度,則如果您使用 Preserve,就只能變更最後一個維度的大小。
**屬性。**您可以在存有值陣列的屬性中使用 ReDim。
行為
陣列取代:ReDim 會釋放現有的陣列,並以相同陣序建立一個新的陣列。 新的陣列會取代被釋放陣列中的陣列變數。
不使用 Preserve 進行初始設定如果您未指定 Preserve,ReDim 會將新陣列的元素初始化為資料型別的預設值。
使用 Preserve 進行初始設定如果您指定 Preserve 修飾詞,Visual Basic 會將現有陣列的元素複製到新陣列。
範例
下列範例會增加動態陣列中最後一個維度的大小,且不遺失陣列中任何現有的資料,接著以遺失部分資料減少陣列的大小。 最後,它會減少大小回到原始值,並重新初始化所有的陣列元素。
Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)
第一個 ReDim 建立的新陣列會取代變數 intArray 中現有的陣列。 ReDim 會將現有陣列的所有元素複製到新陣列。 它還會在每層中的每一資料列結尾處多加入 10 個資料行,並將這些新資料行中的元素初始化為 0 (陣列之元素型別 Integer 的預設值)。
第二個 ReDim 建立另一個新陣列,並複製所有最適的元素。 不過,每層中每一資料列的結尾會遺失五個資料行。 若您已不使用這些資料行,這種情況並不會造成任何問題。 減少大型陣列的大小,可以釋放您不再需要的記憶體。
第三個 ReDim 會再建立另一個新陣列,並從每層中的每一資料列結尾處再移除另外五個資料行。 這一次,它不會複製任何現有的元素。 這會讓陣列還原成原始的大小,並使所有元素回到原始的預設值。