关联数组与多维数组,VBA

Posted

技术标签:

【中文标题】关联数组与多维数组,VBA【英文标题】:Associative array versus multi-dimensional array, VBA 【发布时间】:2018-11-26 16:15:21 【问题描述】:

我觉得我缺少一些基本的理解......希望这不会被认为过于宽泛或主观,因为我不确定要发布到哪个 Stack Exchange 网站。

VBA 的关联数组是字典。我非常粗略的理解是 Dictionary 只是一个多维数组;要在矩阵中找到一个值,您仍然需要迭代并在矩阵的第一行中找到一个匹配值,然后将其用于输出矩阵中同一列的第 n 行中的值。

如果以上内容在任何方面都是正确的,那么Dictionary 比标准的multi-dimensional array 更有效吗?

【问题讨论】:

在哪种意义上“更高效”? @Egalth 我想这本身可能是一个完整的问题。有人告诉我,使用关联数组而不是标准数组查找数据(如姓氏的电话簿)更快地输出相关信息(人 x 的电话号码)。在效率方面,我相信我会谈论速度,而不是编写代码的难易程度。我对字典的了解还不够,无法说明 IDE 中存在的大量术语,以使其更快地编写。 A Dictionary不是多维数组 - 它散列用于查找的键。使用Dictionary 的“效率”将随着元素的数量而增加。 @Egalth 不,它不是(必然)一个二维数组。 @Egalth 同样,不,不是。我建议阅读我之前链接的Wikipedia page 或下面链接的the SO answer。您将数据结构与实现混淆了。即使我们假设它是“具有某些属性的 2 元组的集合”,但这并不意味着它作为 2 元组的数组存储。跨度> 【参考方案1】:

要在矩阵中找到一个值,您仍然需要迭代并在矩阵的第一行中找到一个匹配值,然后将其用于输出矩阵中同一列的第 n 行中的值.

字典不是这样工作的。

字典查找是哈希查找(键必须是唯一的),使它们大致 O(1),而 迭代矩阵的第一行 如您所述O(n)...这意味着您查看的项目越多,字典与数组相比就越有利...假设您没有迭代键(即假设您'正在按键检索项目)。

【讨论】:

Mat's Mug 再次解释...谢谢!哈希查找让我感到困惑,但给了我一些别的东西来更好地理解。哈希表本质上是一个将所有值作为变体的字典,其中字典要求您为每个值指定维度?对不起,第二个问题... s.o.b.... 看看你就会发现。再次感谢;看到你的答案后我在谷歌搜索时没有出现。那篇文章给了我……基本上我可能想问的每一个答案。非常感谢! @MathieuGuindon,说字典是一种特殊类型的数组准确吗? @Egalth 只不过是 Stack 是某种数组。或Queue。或任何其他数据结构。并非一切都是数组。 好的,有道理。但毕竟,字典也可以称为“关联数组”......您提供的链接有一个精彩的非技术解释,谢谢。但是区分基本原理和语义有点棘手。【参考方案2】:

使用 Bounds Like:Lbound(array) to Ubound (array) 它将逐行遍历每个单元格

【讨论】:

这不能解决问题-

以上是关于关联数组与多维数组,VBA的主要内容,如果未能解决你的问题,请参考以下文章

将多维数组传递到 VBA 中的 Excel UDF

带键的VBA多维数组? [关闭]

VBA:多维数组中的字符串索引

C# 中的多维关联数组

在 PHP 中将多维关联数组展平为一维引用数组

多维关联数组交集php