【发布时间】:2018-02-28 13:23:33
【问题描述】:
在处理长字符串列表时,vba 中的集合是否不如数组高效?
我的 vba-Tool 没有我想要的那么快。我使用了很多集合,因为我不需要 REDIM,也不需要使用额外的计数变量。
例如(我想将数组 a 和集合 col 合并到一个列表中,但棘手的部分是,对于每个数组元素,都有一定数量的 col 元素):
For i = 1 To col.count
colSave.Add "==========================="
colSave.Add a(i - 1)
colSave.Add "==========================="
For k = 1 To colFilter.Item(i).count
colSave.Add col.Item(i).Item(k)
Next k
Next i
在这种情况下使用带有第三个计数变量的数组更有效吗?
【问题讨论】:
-
这完全取决于您要完成的工作。例如,将单元块移入和移出数组要容易得多。
-
一个因素是如何创建集合或数组。使用内置方法将一系列单元格读取到数组中非常有效。创建一个集合然后填充它可能效率较低,这再次取决于使用的方法。字符串最低效的方面是它们的不变性,如果您要连接,您可能想要创建一个字符串生成器。我在我的网站上发布了一个:(警告要明确:这是我自己的网站,没有广告意图!)excelpro.tech/free-downloads.php
-
如有疑问——基准测试。
-
一个关键问题是您是否需要动态增长数据结构。如果您发现自己在循环中使用
ReDim Preserve- 尽快切换到集合。否则,除非您有充分的理由不这样做,否则请坚持使用数组。在某些情况下,您可能需要考虑使用来自 VB.Net 的ArrayList(但可通过CreateObject()在 VBA 中使用)