ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 灰袍法师

[原创] VBA字典的原理:哈希查找的示例程序,现在创造你自己的VBA字典吧!

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-1-13 13:47 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
好东西,留个位子学习

TA的精华主题

TA的得分主题

发表于 2011-1-13 14:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
高、深、神!
正在学用字典,虽不十分明白,但还是受益匪浅,下载收藏慢慢琢磨。
谢楼主!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-13 18:22 | 显示全部楼层
原帖由 praijna 于 2011-1-13 07:39 发表
灰袍大师,您那个例子里提取是两列数据的交集.如果是提取非交集呢,怎么弄?或者每列数据里的数据并不全都是唯一的,如果提取他们相同的部分,不同的部分呢?


非交集也一样啊,把交集的部分去掉就是非交集了,改为输出在另一列找不到的数据即可

不唯一的数据也没问题,因为相同的数据在字典里面总是放在相同的位置,你可以选择只留下一个,或者把所有相同的数据连接起来

[ 本帖最后由 灰袍法师 于 2011-1-13 18:24 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-1-13 23:28 | 显示全部楼层
用HASH从附件中来看比字典要快呢。

但是根据法师的说法;Hash计算函数是 : 存放位置 = 关键字 * 一个不大不小的质数 mod 哈希表的大小

如果关键字是数值还好,关键字如果不是数值呢?那怎么办?

TA的精华主题

TA的得分主题

发表于 2011-1-13 23:36 | 显示全部楼层

回复 25楼 AVEL 的帖子

我的理解是指该关键字存放位置所对应的二进制数,所以不论是什么类型都可以参与运算。不知对否?

TA的精华主题

TA的得分主题

发表于 2011-1-13 23:49 | 显示全部楼层
我的理解不对!同样有25楼的疑问。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-14 01:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 AVEL 于 2011-1-13 23:28 发表
用HASH从附件中来看比字典要快呢。

但是根据法师的说法;Hash计算函数是 : 存放位置 = 关键字 * 一个不大不小的质数 mod 哈希表的大小

如果关键字是数值还好,关键字如果不是数值呢?那怎么办?


这个问题问得很好,可以把字符串看作是一串 byte 类型的数字,然后根据这一串数字计算出一个特征整数

顶楼更新了 字符串和数字混合查找的附件,用的是最简单的Horner算法,其实也很类似随机数的生成算法

把字符串当作一串随机byte,然后用固定的种子,计算这一串随机Byte生成的伪随机数。

可惜的是,VBA对于字符转数字实在很不方便,所以导致转换时间太多

对于小规模的查找,完全抵消了哈希表纯数组运算的优势了。(就像10以内的小规模查找,遍历数组会比VBA字典更快一样)

不过十万规模的记录,还是会比VBA字典对象要快几倍的。规模过百万的话,快几十倍。规模过千万的话,快几百倍。

因为VBA字典对象超过20万记录就会性能大减,而用VBA数组设计的哈希表,对记录多少是无所谓的,只是要更多的内存而已。

[ 本帖最后由 灰袍法师 于 2011-1-14 02:50 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-1-14 03:31 | 显示全部楼层
老师真神人呀!

珍藏学习!

版主老师!加精啊

TA的精华主题

TA的得分主题

发表于 2011-1-15 03:40 | 显示全部楼层

回复 28楼 灰袍法师 的帖子

嗯  下载新附件学习一下。。。

TA的精华主题

TA的得分主题

发表于 2011-1-15 09:36 | 显示全部楼层
听的不懂,看看吧,高手中的高手
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 07:19 , Processed in 0.047254 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表