动态数组(数组大小调整和动态处理)
动态数组
动态添加和减少变量是一个巨大的优势,因为当你处理的信息没有一定数量的变量时。
动态添加值
你可以使用 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