我正在尝试重新安装MS Access VBA中的数组。最有效的方法是什么?
答案 0 :(得分:13)
怎么样......
这将保留已存在于MyArray中的数据
Redim Preserve MyArray(15)
这将删除MyArray中存在的所有先前数据
Redim MyArray(15)
答案 1 :(得分:11)
重新定义数组的最强高效方法是限制调整该数组大小的次数。每次调整数组大小时,VB都会占用整个数组并复制它,浪费时间和内存。
如果您在开发时不知道阵列的大小,则应该对阵列的最大大小进行最佳猜测,然后填充阵列。填完阵列后,您可以将其调整到正确的大小。
在循环中,通常最好通过在空间不足时将当前数组的大小加倍来进行猜测。您可以在下面的操作中看到此操作,RedimTestA()
每次迭代(1,000,000次)调整数组大小,RedimTestB()
仅偶尔调整大小(22次)。
在我的笔记本电脑上RedimTestA()
需要3.93秒而RedimTestB()
需要0.41秒。
Option Explicit
Sub RedimTest()
Dim tA, tB As Single
tA = RedimTestA(1000000)
tB = RedimTestB(1000000)
MsgBox "Test A takes : " & tA & ", and Test B takes : " & tB
End Sub
Function RedimTestA(iterations As Long) As Single
Dim t As Single
Dim i As Long
Dim aryString() As String
Dim myString As String
t = Timer
Do While i <= iterations
ReDim Preserve aryString(i) As String
aryString(i) = "ABCEFG123"
i = i + 1
Loop
RedimTestA = Timer - t
End Function
Function RedimTestB(iterations As Long) As Single
Dim t As Single
Dim i As Long
Dim aryString() As String
Dim myString As String
t = Timer
ReDim aryString(0) As String
Do While i <= iterations
If i >= UBound(aryString) Then
ReDim Preserve aryString(i * 2) As String
End If
aryString(i) = "ABCEFG123"
i = i + 1
Loop
ReDim Preserve aryString(i - 1) As String ' i - 1 becuase of the final i = i + 1
RedimTestB = Timer - t
End Function
答案 2 :(得分:9)
另请注意,您只能重新构建多维数组的最右侧维度。