動態陣列(陣列大小調整和動態處理)

動態陣列

動態新增和減少變數是一個巨大的優勢,因為當你處理的資訊沒有一定數量的變數時。

動態新增值

你可以使用 ReDim 語句簡單地調整陣列大小,這將調整陣列的大小,但如果要保留已儲存在陣列中的資訊,則需要使用 Preserve 部分。

在下面的示例中,我們建立一個陣列,並在每次迭代中將其增加一個變數,同時保留陣列中已有的值。

Dim Dynamic_array As Variant
' first we set Dynamic_array as variant

For n = 1 To 100

    If IsEmpty(Dynamic_array) Then
        'isempty() will check if we need to add the first value to the array or subsequent ones
    
        ReDim Dynamic_array(0)
        'ReDim Dynamic_array(0) will resize the array to one variable only
        Dynamic_array(0) = n

    Else
        ReDim Preserve Dynamic_array(0 To UBound(Dynamic_array) + 1)
        'in the line above we resize the array from variable 0 to the UBound() = last variable, plus one effectivelly increeasing the size of the array by one
        Dynamic_array(UBound(Dynamic_array)) = n
        'attribute a value to the last variable of Dynamic_array
    End If

Next

動態刪除值

我們可以使用相同的邏輯來減少陣列。在示例中,將從陣列中刪除值 last

Dim Dynamic_array As Variant
Dynamic_array = Array("first", "middle", "last")
    
ReDim Preserve Dynamic_array(0 To UBound(Dynamic_array) - 1)
' Resize Preserve while dropping the last value

重置陣列並動態重用

我們也可以重新利用我們建立的陣列,因為記憶體不會很多,這會使執行時間變慢。這對於各種大小的陣列很有用。你可以用來重新利用陣列的一個片段是將陣列返回到 (0),將一個變數歸屬到陣列並再次自由地增加陣列。

在下面的程式碼片段中,我構造了一個值為 1 到 40 的陣列,清空陣列,並使用值 40 到 100 重新填充陣列,所有這些都是動態完成的。

Dim Dynamic_array As Variant

For n = 1 To 100

    If IsEmpty(Dynamic_array) Then
        ReDim Dynamic_array(0)
        Dynamic_array(0) = n
    
    ElseIf Dynamic_array(0) = "" Then
        'if first variant is empty ( = "") then give it the value of n
        Dynamic_array(0) = n
    Else
        ReDim Preserve Dynamic_array(0 To UBound(Dynamic_array) + 1)
        Dynamic_array(UBound(Dynamic_array)) = n
    End If
    If n = 40 Then
        ReDim Dynamic_array(0)
        'Resizing the array back to one variable without Preserving,
        'leaving the first value of the array empty
    End If

Next