我最近学会了使用数组作为我的 VBA 宏的一部分。我知道它们是有效使用 VBA 不可或缺的一部分,因此我想了解更多有关如何有效处理数组的信息。我搜索了一下,找到了几篇文章,但如果我缺少一些主要的东西,请告诉我。
这是一个示例代码,一个查找第 N 个素数的子程序。它通过在素数数组上使用试除法来实现这一点,动态地将新素数添加到数组中。
Sub FindNthPrime()
StartTime = Timer
Dim Counter, n, i As Single
Dim Primes() As Double 'An array of primes so far
Dim TestVal As Double
Dim PrimeTest As Boolean
n = 100000 'Find the n'th prime number
ReDim Primes(0)
Primes(0) = 2 'Start the array at 2
Counter = 1 'Start the Counter at 1
TestVal = 3 'Start testing with 3
Do Until Counter = n
PrimeTest = True
For i = 0 To UBound(Primes)
If Primes(i) > (TestVal ^ 0.5) Then Exit For
If TestVal Mod Primes(i) = 0 Then
PrimeTest = False
Exit For
End If
Next i
If PrimeTest = True Then
ReDim Preserve Primes(UBound(Primes) + 1)
Primes(UBound(Primes)) = TestVal
Counter = UBound(Primes) + 1
End If
TestVal = TestVal + 2
Loop
Debug.Print Primes(UBound(Primes))
Debug.Print Timer - StartTime
End Sub
在基本的基准测试中,此代码在不使用数组(测试所有奇数直到我们测试数的平方根)的情况下确实优于蛮力试除算法,但相差不大。随着质数变大,在本例中是 100,000 的质数,我们看到我的机器上的计算时间超过了 5 秒。
TL;DR:关于使上述代码更高效的任何提示?