在数组中,对于每个...下一个vs对于...下一个

如果要访问数组中的每个项目,则有两种选择:

  1. 使用For Each..Next循环,使用Variant依次检索每个值。
  2. 使用For ... Next循环,从数组的下边界循环到上边界。
对于每个...下一个似乎更简单,因为您不必担心获取下界和上界-循环会为您解决这一问题。
For Each varValue In alngValues
    j = varValue
Next varValue
使用For ... Next需要您付出更多的努力,因为您必须编写查找上下限的代码。
For lngCount = LBound(alngValues) To UBound(alngValues)
    j = alngValues(lngCount)
Next lngCount
您可能会认为For Each ... Next会更快,因为它需要较少的代码,但事实并非如此。 如果您正在使用数组,则For ... Next循环将为您提供更好的性能。 在测试中,较快版本的速度约为较慢版本的70%。 这是将证明我观点的实际代码。 请特别注意timeGetTime()API函数充当秒表:
'First, the API Declaration
Public Declare Function timeGetTime Lib "winmm.dll" () As Long
Public Function fForEach_Next(lngRepeats As Long) As Long
'Slower version of code using For Each...Next to process Array Elements 
Dim alngValues(1 To 1000) As Long
Dim varValue As Variant, i As Long, j As Long
Dim lngStartTime As Long 
For i = 1 To 1000
  alngValues(i) = i
Next i 
lngStartTime = timeGetTime()
For i = 1 To lngRepeats
  For Each varValue In alngValues
    j = varValue
  Next varValue
Next i
fForEach_Next = (timeGetTime() - lngStartTime)
End Function
Public Function fFor_Next(lngRepeats As Long) As Long
'Faster version of code using For...Next to process Array Elements 
Dim alngValues(1 To 1000) As Long
Dim lngCount As Long, i As Long, j As Long, T As Long
Dim lngStartTime As Long 
For i = 1 To 1000
  alngValues(i) = i
Next i 
lngStartTime = timeGetTime()
For i = 1 To lngRepeats
  For lngCount = LBound(alngValues) To UBound(alngValues)
    j = alngValues(lngCount)
  Next lngCount
Next i
fFor_Next = (timeGetTime() - lngStartTime)
End Function
警告! -尽管您可以使用这两种技术中的任何一种来读取Array中的项目,但只能使用For ... Next循环写入Array元素。 For Each ... Next循环检索Array中数据的副本,而不是实际的Array元素本身。 尽管使用For Each ... Next写入数组不会出现错误,但数据实际上不会进入数组。

From: https://bytes.com/topic/access/insights/719547-arrays-each-next-vs-next

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值