ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

Collection快吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-20 15:57 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 m_n_j001 于 2013-11-21 15:44 编辑

今天学习了一下Collection的使用,看到一位达人在帖子中说大意是数据量大的情况下用Collection至少能快不少。怎么没感觉到呢?如以下三个生成不重复数据的代码:
Sub aaa()    '这个用数组,很快
t = Timer
Dim ar(1 To 65536, 1 To 1), br(1 To 65536)
For i = 1 To 65536
    br(i) = i
Next
Randomize
For i2 = 1 To 65536
   i = i - 1
   r = Int(Rnd * i + 1)
   ar(i, 1) = br(r)
   br(r) = br(i)
Next
[a1] = Timer - t
[b1:b65536] = ar
End Sub
Sub bbb()   '这个用字典,稍慢。如果和集合一样改成remove,则成老态龙钟的蜗牛
t = Timer
    Dim Dic As New Dictionary
    Dim ar(1 To 65536, 1 To 1)
    Dim i As Long
    For i = 1 To 65536
        Dic(i) = i
    Next
    Randomize
    For i2 = LBound(ar) To UBound(ar)
        i = i - 1
        r = Int(Rnd * i + 1)
        ar(i2, 1) = Dic(r)
        Dic(r) = Dic(i)
    Next
[a2] = Timer - t
[c1:c65536] = ar
End Sub
Sub ccc()   '这个用集合,很慢,估计是Remove造成的
t = Timer
Dim s As New Collection, ar(1 To 65536, 1 To 1)
For i = 1 To 65536
    s.Add i
Next
Randomize
For i = 1 To 65536
   r = Int(Rnd * s.Count + 1)
   ar(i, 1) = s(r)
   s.Remove (r)
Next
[a3] = Timer - t
[d1:d65536] = ar
End Sub
这还是在数万个数据情况,要是再多呢?怎么体现“数据量大的情况下用Collection至少能快不少”?是哪里错了?请各位达人指教!或提供一些示例体现Collection的快,谢谢


---------------------------------------------------------------------------------------------------------------------------------------
在众多达人的帮助下,特别是14楼达人的回复,从根源上指明了原理,非常感谢!现在基本可以结贴了。
此贴学习笔记:
集合中,访问内容时用key远胜于index,删除时从前删远胜于从后删。

TA的精华主题

TA的得分主题

发表于 2013-11-20 16:01 | 显示全部楼层
你问那达人呀

另外,把数据限制在5000以内看看速度

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-20 16:06 | 显示全部楼层
您更是达人中的达人呀{:soso_e179:}
请指导一下嘛{:soso_e183:}

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-20 16:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
按您的提示,改成4000,前两个时间都是0,它是0.04多点,还是见不到优势呀?
可以提供一些示例来体现Collection的快吗?

TA的精华主题

TA的得分主题

发表于 2013-11-20 20:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-11-20 20:53 | 显示全部楼层
我个人理解,字典也是一种集合,

集合的作用更主要的是针对对象的处理,如workbooks,sheets 本质都是集合

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-20 21:08 | 显示全部楼层
northwolves 发表于 2013-11-20 20:53
我个人理解,字典也是一种集合,

集合的作用更主要的是针对对象的处理,如workbooks,sheets 本质都是集 ...

的确,实际中集合随处可见。
可是狼版,此处的Collection与sheets等集合所指不太一样吧?感觉是有广义与狭义之别吧?
此贴的目的是想学学这狭义上的Collection,因为在论坛中看到有说在百万千万数据时,它非常快,但没看到有具体的实例。试了下却相反,毕竟初学,一定是我自己整错了,所以才开贴求助。
谢谢!

TA的精华主题

TA的得分主题

发表于 2013-11-20 22:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
前些年写的一些东西,供参考:
http://www.baidu.com/s?wd=%BC%AF%BA%CF+northwolves

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-20 22:23 | 显示全部楼层
谢谢狼版。
利用add的参数before和after来排序,的确是集合的一个好应用。

TA的精华主题

TA的得分主题

发表于 2013-11-20 23:49 | 显示全部楼层
是来源于这个帖子中
http://club.excelhome.net/thread-1032842-5-1.html

45楼的说法么?
lee1892说:
【太高的没有,用Collection至少能快不少~ 】

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 03:05 , Processed in 0.040501 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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