動態陣列(陣列大小調整和動態處理)
動態陣列
動態新增和減少變數是一個巨大的優勢,因為當你處理的資訊沒有一定數量的變數時。
動態新增值
你可以使用 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