所以,我在Excel中得到了一个分析程序的单词,我希望能够导入超过3000万个单词。
首先,我为每个单词创建了一个单独的对象,以便每个单词都有一个......
.value '(string), the actual word itself
.bool1 '(boolean)
.bool2 '(boolean)
.bool3 '(boolean)
.isUsed '(boolean)
.cancel '(boolean)
当我发现我可能有3000万个这些对象(都存储在一个集合中)时,我认为这可能是一个可以编译的怪物。所以我决定我的所有单词都是字符串,并且我会把它们粘在一个数组中。
所以我的数组想法是在每个字符串的开头添加5个空格(对于我的5个bool)来附加3000万个字符串中的每个字符串,每个空格代表一个假bool val。 e.g,
If instr(3, arr(n), " ") = 1 then
'my 3rd bool val is false.
Elseif instr(3, arr(n), "*") = 1 then '(I'll insert a '*' to denote true)
'my third bool val is true.
End If
无论如何,你们怎么想?我应该采用哪种方式(集合或数组)(具体为优化)?
答案 0 :(得分:2)
(我想把它作为评论,但它变得太长了)
答案取决于您在存储后如何访问和处理单词。
3名候选人有显着的好处和明显的优势:
数组非常有效地一次填充和检索所有项目(例如,数组范围和数组返回范围),但重新调整大小和插入项目的速度要慢得多中间。每个Redim都将整个内存块复制到一个更大的位置,如果使用Preserve,则所有值都会被复制。这可能转化为每个操作(在潜在的应用程序中)的感知缓慢
集合是带有哈希表的链接列表 - 填充速度非常慢但在此之后您可以即时访问集合中的任何元素,并且在重新排序(排序)时也一样快大小调整。这可以转换为慢速打开文件,但所有其他操作都是即时的。其他方面:
字典:与集合相同,但具有.Exists()方法的额外好处,在某些情况下,它们比集合更快。其他方面:
Exists()方法测试是否存在特定键(和项目)
字典支持使用Item属性隐式添加项目。
更多详情here
其他链接:optimizing loops和optimizing strings(同一网站)