JMa*_*Max 36
使用数组而不是集合(或字典)的几个原因:
Range("A1:B12") = MyArray请参阅Chip Pearson关于数组的文章,以便更好地理解
更好的问题是为什么人们会使用集合而不是字典(好吧,集合是标准的VBA,而你必须导入字典)
Nig*_*nan 18
@CharlesWilliams的答案是正确的:循环遍历数组的所有值比迭代Collection或字典更快:所以,当我需要这样做时,我总是使用字典的Keys()或Items()方法 - 两种方法都返回一个矢量数组.
注意:我使用Dictionary类远比使用集合更多,Exists()方法太有用了.
收藏和词典有或当然有缺点.其中之一是数组可以是2维甚至3维 - 对于制表数据来说,这是一个更好的数据结构.你可以将数组存储为集合的成员,但是有一些缺点:其中一个是你可能没有得到对该项的引用 - 除非你使用__CODE__你几乎肯定会获得数组的'ByVal'副本; 如果您的数据是动态的,那么这很糟糕,并且可能会受到多个流程的影响.它也很慢:大量的分配和释放.
最糟糕的是,如果我有一个带有数组(或对象!)的集合或字典作为成员,我不太相信VBA会释放内存:不是在范围之外,而__CODE__不是甚至是objDictionary.RemoveAll -很难用VBE中提供的有限测试工具包来证明问题存在,但我已经在使用字典中的数组的应用程序中看到了足够的内存泄漏,知道你需要谨慎.话虽这么说,我从来没有使用过没有Erase命令的阵列.
@JMax解释了数组的另一大优点:你可以在工作表的单个"点击"中填充一个数组,并在一次点击中回写你的工作.
当然,您可以通过构造索引数组类来获得两全其美:具有关联集合的二维数组或存储某种行标识符作为键的字典对象,以及行序列作为数据项.