当前位置: 首页 > news >正文

【VBA中的集合(Collection)的引用和方法参数】 VS 字典(Dictionary)

在 VBA 中,集合(Collection) 是一种内置的容器对象,用于存储一组有序的项目。与字典(Dictionary)不同,集合的键(Key)是可选的(只能是字符串类型),且支持通过索引或键快速访问元素。以下是集合的引用方法和常用参数介绍:


1. 创建集合对象

集合是 VBA 内置对象,无需引用额外库,直接声明即可:

Dim coll As New Collection
' 或
Dim coll As Collection
Set coll = New Collection

2. 集合的常用方法和属性

(1) 常用方法
方法描述参数说明
.Add(Item, [Key], [Before], [After])添加元素到集合- Item: 要存储的值(必填)
- Key: 唯一字符串键(可选,若提供,可通过键访问元素)
- Before/After: 指定插入位置(索引或键)
.Remove(Index)移除元素Index: 可以是数值索引(从 1 开始)或键(若元素有 Key)
.Item(Index)获取指定元素Index: 数值索引(1-based)或键
.Count返回集合中元素总数无参数

3. 示例代码

(1) 基础操作
Sub CollectionExample()Dim coll As New Collection' 添加元素(无 Key)coll.Add "Apple"coll.Add "Banana"coll.Add "Orange"' 添加带 Key 的元素(Key 必须唯一)coll.Add "Mango", Key:="Fruit4"' 获取元素(通过索引或 Key)MsgBox coll.Item(1)           ' 输出: Apple(索引从 1 开始)MsgBox coll.Item("Fruit4")    ' 输出: Mango' 修改元素:需先移除后添加(集合不可直接修改值)coll.Remove "Fruit4"coll.Add "NewMango", "Fruit4"' 遍历集合Dim item As VariantFor Each item In collDebug.Print itemNext item' 删除元素coll.Remove 1      ' 删除第一个元素("Apple")
End Sub
(2) 指定元素插入位置
Sub InsertExample()Dim coll As New Collectioncoll.Add "Apple", "A"coll.Add "Banana", "B"coll.Add "Orange", "O"' 在 "B"(Banana)前插入 "Grape"coll.Add "Grape", Key:="G", Before:="B"' 遍历结果:Apple → Grape → Banana → Orange
End Sub

4. 集合的优缺点

优点
  • 内置对象,无需引用额外库。
  • 支持有序存储(插入顺序或指定位置)。
  • 可通过索引或键访问元素(若提供 Key)。
缺点
  • 键必须是唯一的字符串(Key 是可选参数)。
  • 无法直接修改元素值,需移除后重新添加。
  • 查找性能低于字典(尤其在大型数据集中)。

5. 集合 vs 字典

特性集合(Collection)字典(Dictionary)
键类型只能是字符串(可选)任意数据类型
值类型任意数据类型任意数据类型
有序性支持有序无序(可通过 .Keys.Items 遍历)
直接修改值❌ 需移除后添加✔️ 支持直接修改(.Item(key) = value
性能查找较慢查找高效(哈希表实现)
是否需要引用库❌ 内置✔️ 需引用 Microsoft Scripting Runtime

6. 适用场景

  • 需要有序存储或通过位置操作元素时(如 FIFO 队列)。
  • 对小型数据集进行简单存储,且无需频繁修改值。
  • 无需键的快速查找功能时。

7. 注意事项


集合的索引是从1开始的,而不是0,这和VBA中的数组不同,容易出错。同时,遍历集合的方法,比如For Each循环,或者通过索引访问元素,但要注意性能问题,特别是大集合时。


比较集合和字典的不同使用场景,帮助用户决定何时使用集合更方便,比如需要简单有序的存储,或者需要快速按顺序插入元素,而字典适合需要高效查找和唯一键的情况。


若需要高效键值对操作,建议优先使用 Dictionary

相关文章:

  • 【无标题】python执行系统命令
  • Python 训练营打卡 Day 34
  • 基于Springboot + vue3实现的养老系统
  • 电子电路:再谈滤波原理及其应用
  • 卷积神经网络优化与应用实践:参数设置、泛化能力提升及多领域应用解析
  • LeetCode 3362.零数组变换 III:贪心+优先队列+差分数组——清晰题解
  • 6个月Python学习计划 Day 3
  • 【第四篇】 SpringBoot整合第三方技术
  • 【Linux 学习计划】-- git 在Linux远端服务器上的部署与简单使用
  • Ubuntu24安装Ollama
  • Java三十而立:Java 的30岁与Spring AI 1.0正式发布
  • ABC406E 题解
  • 1.4 TypeScript 编译是如何工作的?
  • [案例六] NX二次开发减重块的实现(支持组件和实体)
  • 鸿蒙UI开发——上拉抽屉的更新与事件回调
  • CMake指令:add_library()
  • 单例模式总结
  • Python训练营---Day35
  • 【笔记】OpenCV的学习(未完)
  • 开发者工具箱-鸿蒙颜色转换器开发笔记
  • aspnet网站模板/app代理推广平台
  • 武汉网站建设报价/企业seo外包公司
  • 一个网站备案多个域名吗/长沙seo管理
  • 公安网站建设素材/seo关键词快速排名前三位
  • 网站经营内容/app推广是什么意思
  • 工艺品网站怎么做/什么是网络整合营销