ReDim 陳述式 (Visual Basic)
重新配置陣列變數的儲存空間。
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
組件
詞彙 |
定義 |
---|---|
Preserve |
選擇項。 修飾詞 (Modifier),在只變更最後一個維度的大小時,用於保留現有陣列中的資料。 |
name |
必要項。 陣列變數的名稱。 請參閱宣告項目名稱 (Visual Basic)。 |
boundlist |
必要項。 重新定義之陣列中每個維度的範圍清單。 |
備註
您可以使用 ReDim 陳述式,變更已宣告之陣列中一個或多個維度的大小。 如果陣列很大,而且不再需要其中的部分元素,則 ReDim 可以藉由減少陣列大小,釋放記憶體。 另一方面,,如果陣列需要更多項目, ReDim 可以加入。
ReDim 陳述式只適用於陣列, 不能在只包含單一值的純量 (變數,集合或結構。 請注意,如果您將變數宣告為型別 Array, ReDim 陳述式沒有型別的資訊建立新的陣列。
您只能在程序層次使用 ReDim。 因此,變數的宣告內容必須是程序;它不能是原始程式檔、命名空間、介面、類別、結構、模組或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)。
規則
多個變數您可以調整在同一個宣告陳述式的幾個變數和為每個變數指定 name 和 boundlist 組件。 變數之間以逗號 ( , ) 來分隔。
陣列界限boundlist 中的每個項目都可以指定該維度的下限 (Lower Bound) 和上限 (Upper Bound)。 下限一定是 0 (0)。 這個上限是該維度,是上限加一) 不是的長度最高索引值維度 (。 每個維度的索引可從 0 變更透過其上限的值。
維度數目的 boundlist 必須符合原始陣列的陣序 (維度) 陣列。
資料型別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)
Dim 陳述式會建立具有三個維度的陣列。 每個維度宣告繫結 10,因此,每個維度的陣列索引可能範圍從 0 到 10。 下列討論中, 3-D 稱為圖層、資料列和資料行。
第一個 ReDim 建立的新陣列會取代變數 intArray 中現有的陣列。 ReDim 會將現有陣列的所有元素複製到新陣列。 它也另外增加 10 行到每行結尾在每個圖層和初始化這些新資料列的項目設為 0 (預設值為 Integer,否則為陣列的元素型別)。
第二個 ReDim 建立另一個新陣列複製到相容的所有項目。 不過,每層中每一資料列的結尾會遺失五個資料行。 若您已不使用這些資料行,這種情況並不會造成任何問題。 減少大型陣列的大小,可以釋放您不再需要的記憶體。
第三個 ReDim 建立另一個新陣列並從每行結尾在每個圖層的移除另外五個資料行。 這一次,它不會複製任何現有的元素。 這個陳述式還原陣列至其原始大小。 由於陳述式並不包含 Preserve 修飾詞,會將所有陣列項目至原始的預設值。
如需其他範例,請參閱 Visual Basic 中的陣列。