动态数组(数组大小调整和动态处理)

动态数组

动态添加和减少变量是一个巨大的优势,因为当你处理的信息没有一定数量的变量时。

动态添加值

你可以使用 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