ReDim 陳述式 (Visual Basic)

重新配置陣列變數的儲存空間。

語法

ReDim [ Preserve ] name(boundlist) [ ,  name(boundlist) [, ... ] ]  

組件

詞彙 定義
Preserve 選擇性。 僅變更最後維度的大小時,用來保留現有陣列資料的修飾詞。
name 必要。 陣列變數的名稱。 請參閱 Declared Element Names
boundlist 必要。 重新定義之陣列各維度的界限清單。

備註

您可以使用 ReDim 陳述式變更已宣告陣列的一或多個維度的大小。 如果您有大型的陣列,而且不再需要其中某些項目,ReDim 可以減少陣列大小,釋出記憶體。 另一方面,如果陣列需要更多項目,ReDim 可以加入項目。

ReDim 陳述式僅供陣列使用。 對純量 (僅含單一值的變數)、集合或結構無效。 請注意,如果您宣告變數為類型 Array,則 ReDim 陳述式就沒有足夠的類型資訊建立新的陣列。

ReDim 只能在程序層級使用。 因此,變數的宣告內容必須是程序,不能是原始程式檔、命名空間、介面、類別、結構、模組或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級

規則

  • 多個變數。 您可以調整相同宣告陳述式中數個陣列變數的大小,並為每個變數指定 nameboundlist 組件。 以逗號分隔多個變數。

  • 陣列界限。 boundlist 中的每個項目都可以指定該維度的上下限。 下限一律為 0 (零)。 上限是該維度可能的最高索引值,不是維度長度 (上限加 1)。 每個維度的索引從 0 到上限值不等。

    boundlist 中的維度數目必須符合陣列的原始維度 (陣序) 數目。

  • 資料類型。 ReDim 陳述式不能變更其元素陣列變數的資料類型。

  • 初始化。 ReDim 陳述式不能提供陣列元素的新初始化值。

  • 順位。 ReDim 陳述式不能變更陣列的陣序 (維度數目)。

  • 以 Preserve 調整大小。 如果使用 Preserve,您也可以只調整陣列的最後一個維度。 至於其他每個維度,您必須指定現有陣列的界限。

    例如,如果您的陣列只有一個維度,您可以調整該維度的大小,但仍保留陣列的所有內容,因為您變更的只有最後一個維度。 不過,如果您的陣列有兩個或以上的維度,如果使用 Preserve,就只能變更最後一個維度的大小。

  • 屬性。 ReDim 可以用在保存值陣列的屬性。

行為

  • 陣列取代。 ReDim 會釋放現有的陣列,並使用相同的陣序建立新的陣列。 新的陣列會取代陣列變數中已釋放的陣列。

  • 不使用 Preserve 的初始化。 如果不指定 PreserveReDim 會使用其資料類型的預設值,初始化新的陣列元素。

  • 使用 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。 在下列的討論中,三維稱為圖層、列和欄。

第一個 ReDim 建立的新陣列,取代了變數 intArray 中現有的陣列。 ReDim 將現有陣列的所有項目全都複製到新的陣列。 它也在每個圖層每一列的結尾加入 10 多個欄,並初始化這些新欄中的項目為 0 (Integer 的預設值,這是陣列的項目類型)。

第二個 ReDim 建立另一個新的陣列,並複製所有符合的項目。 不過,每個圖層每一列的結尾都會遺失五欄。 如果不再使用這些欄就沒有問題。 減少大型陣列的大小可以釋出不再需要的記憶體。

第三個 ReDim 建立另一個新的陣列,並從每個圖層的每一列結尾移除另外五欄。 這次不複製任何現有的項目。 這個陳述式會將陣列還原成原始大小。 因為陳述式不包含 Preserve 修飾詞,所以所有的陣列項目都設為原始預設值。

如需其他範例,請參閱陣列

另請參閱