Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在字符串中隐藏变量与使用具有属性的对象?_Arrays_Excel_Optimization_Collections_Vba - Fatal编程技术网

Arrays 在字符串中隐藏变量与使用具有属性的对象?

Arrays 在字符串中隐藏变量与使用具有属性的对象?,arrays,excel,optimization,collections,vba,Arrays,Excel,Optimization,Collections,Vba,所以,我有一个Excel中的单词分析程序,我希望它能导入3000多万个单词 首先,我为每个单词创建了一个单独的对象,这样每个单词都有一个 .value '(string), the actual word itself .bool1 '(boolean) .bool2 '(boolean) .bool3 '(boolean) .isUsed '(boolean) .cancel '(boolean) 当我发现我可能有3000万个这样的对象(全部存储在一个集合中),我想这可能是一个需要编译的怪

所以,我有一个Excel中的单词分析程序,我希望它能导入3000多万个单词

首先,我为每个单词创建了一个单独的对象,这样每个单词都有一个

.value '(string), the actual word itself
.bool1 '(boolean) 
.bool2 '(boolean)
.bool3 '(boolean)
.isUsed '(boolean)
.cancel '(boolean)
当我发现我可能有3000万个这样的对象(全部存储在一个集合中),我想这可能是一个需要编译的怪物。所以我决定我所有的单词都是字符串,我会把它们放入一个数组中

因此,我的数组想法是通过在每个字符串的开头添加5个空格(对于我的5个布尔值)来追加3000万个字符串中的每一个,每个空格表示一个假布尔值。例如

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
不管怎样,你们怎么想?我应该采用哪种方式(收集或数组)进行此操作(特别是为了优化)

(我想对此发表评论,但太长了)

答案取决于您希望如何访问和处理存储的单词

这三位候选人都有显著的优势:

<>强>数组< /强>是非常有效的填充和检索所有项目一次(从范围到数组和数组返回到范围),但在调整大小和插入项目中途要慢得多。每个Redim都会将整个内存块复制到一个更大的位置,如果使用了Preserve,则也会复制所有值。这可能会转化为每个操作的感知缓慢(在潜在应用中)

  • 更多详细信息(数组与集合)(特定于VB,但也适用于VBA)
  • 集合是带有哈希表的链表-填充速度非常慢,但之后可以立即访问集合中的任何元素,重新排序(排序)和调整大小的速度也一样快。这可以转换为缓慢打开文件,但所有其他操作都是即时的。其他方面:

    • 检索键以及与这些键关联的项
    • 处理区分大小写的密钥
    • 项目可以是其他集合、数组、对象
    • 虽然键必须是唯一的,但它们也是可选的
    • 可以参照项的键或索引值返回项
    • 键始终是字符串,并且始终不区分大小写
    • 项目可以访问和检索,但其密钥不可用
    • 无法一次删除所有项目(可以逐个删除,也可以先销毁然后重新创建集合)
    • 使用For…Each…Next枚举,列出所有项

    • 更多信息和

  • 字典:与集合相同,但具有.Exists()方法的额外优点,在某些情况下,该方法使它们比集合快得多。其他方面:

    • 键是必需的,并且对于该字典总是唯一的
    • 项目只能参照其键返回
    • 键可以采用任何数据类型;对于字符串键,默认情况下字典区分大小写
    • Exists()方法来测试特定键(和项)是否存在

      • 集合没有类似的测试;相反,您必须尝试从集合中检索一个值,如果找不到键,则处理由此产生的错误
    • 项目和密钥始终可供开发人员访问和检索
    • Item属性是读/写属性,因此它允许更改与特定键关联的项
    • 允许您在一个步骤中删除所有项,而无需销毁字典本身
    • 使用For…Each…Next字典将枚举键
    • 字典支持使用item属性隐式添加项

      • 在集合中,必须显式添加项
    • 更多细节



  • 其他链接:和(同一站点)

    我建议您使用除Excel以外的其他工具啊,我对编程基本上是新手,但这不能在Excel中完成?老实说,如果需要的话,我可以让电脑开上几天来完成操作。我从未真正想过这一点,但Excel可能不是最合适的。这是一个很好的问题和方法!比谢谢你的回复!好吧,实际上我一开始只重拨这个数组一次(为了设置UBound)。除此之外,我只使用它创建其他列表,并将这些列表与其内容进行比较。我可以更改arr中的实际字符串(以更改我的秘密布尔值),但我不需要删除str或插入任何新的。我想说哪一个更好是一种推测?我知道我会在整个arr中多次检查这些布尔值。所以,不确定instr操作是否会让我太慢。我正在尝试分析大量的法律证词(这将是我的3000万字)从那时起,我找到了最流行的2、3、4和5个单词短语(那里有很多双循环)。然后我运行了一些搜索(更多循环)基于低频率和其他因素消除我不想要的短语。仅此而已。这是用于法庭报告,即试图提高我的打字速度。我明白了。这对Excel来说可能是一个挑战,因为每个单元格可以容纳多少个字符,所以您可能需要在内存中进行所有处理,或者创建逻辑以在t上拆分短语工作表(不限数量的工作表上有1048576行乘以16384列)。无论哪种方式,您都可能会大量使用字符串函数;请确保您很好地了解它们的微妙之处和参数,从我以前的链接中,您是否注意到任何慢度?(或者您还没有开始处理所有数据?)不确定转换所有代码需要多少努力,但理想情况下,您应该转换一个可以端到端执行任务的独立功能,然后在提交到完整转换之前测量两种方法之间的性能差异