集合是将信息存储于一个一维数组中,以便于访问、增添、删除同类信息
object.count属性,long类型,返回collection对象中元素的个数
object.add(item,key,before,after)方法,无返回值
部分 | 描述 |
---|---|
object | 对象表达式 |
item | 必须的,要添加到集合中的成员 |
key | 可选的。唯一字符串表达式 ,代替位置索引来访问集合中的成员 |
before | 可选的,介于1-collection.count.如果为字符串表达式,则为key值 |
after | 同上,注意after和before不能同时指定 |
1.key参数必须是唯一的字符串索引,如果传递一个数字,将报类型错误,或者索引已被占用;如果该字符串已经被用作索引,则不能再用一次
2.object.remove(index)方法,用于从集合中移除元素,无返回值
3.object.item(index)方法,返回index所指的集合元素
4.使用key参数添加的额外字符串索引是不区分大小写的
Sub Collection_Test()
'声明并初始化一个Collection对象变量c
Dim c As New Collection
'最常规的Add方法的调用,可Add任意类型的对象
c.Add "One"
'有key参数的调用,这个字符串的key参数必须没有被占用
c.Add "Two", "Second"
'下面这句会导致运行时错误457,也即索引已经被占用
'c.Add "Hao", "Second"
'下面这句传递了before参数,将"Zero"插入到原来的第二个元素之前,也即占用第二个元素的位置
c.Add "Zero", , 2
'下面这句传递了after参数,将"Oh yeah"插入到原来的第二个元素之后,也即现在的"Zero"之后,成为第三个元素
c.Add "Oh yeah", , , 2
'下面这句传递三个参数,key参数只是给集合中的这个新增元素一个除原有的数值索引外的另一个字符串索引,这个索引会更友好,更方便记忆
c.Add "Five", "Fifth", , 4
'下面是读取"Five"这个元素,可见字符串索引,是不区分大小写的
Debug.Print c("fifth"), c("Fifth"), c(5), c.Item(5), c.Item("Fifth"), c.Item("fifth")
'下面这一句会出错,错误提示:索引已经被占用
'c.Add "Six", "fifth"
End Sub
来源:也说Collection对象
数据类型:没有任何限制,可以是数值、文本或单元格区域、图片···
与普通一维数组相比:可以进行写入(.add添加)、读取、删除(.remove)
add时,不需要地址,总是自动添加到集合数组中的最后一个位置
例:
普通数组
Sub test()
Dim arr()
For i = 1 To 10
ReDim Preserve arr(1 To i)
arr(i) = i
Next
End Sub
集合
Sub test()
Dim a As New Collection
For i = 1 To 10
a.Add i
Next
End Sub
写法:b = a(i)或b=a.item(i)
可以看出和普通数组并无差异,但是只有字典可以用key关键字定位置
普通数组:
Sub test()
Dim arr()
For i = 1 To 10
ReDim Preserve arr(1 To i)
arr(i) = i
Next
'删除第5个元素
For i = 6 To UBound(arr)
arr(i - 1) = arr(i)
Next
ReDim Preserve arr(1 To UBound(arr) - 1)
End Sub
集合:
Sub test()
Dim a As New Collection
For i = 1 To 10
a.Add i
Next
'删除第5个元素
a.Remove 5
End Sub
和字典相比:
字典可以用RemoveAll方法一次性全部删除元素,而集合则需要循环
for i = 1 to a.count
a.Remove(1)
next
注意这里是a.Remove(1)
或者每次删除最后一个的方法:
for i = 1 to a.count
a.Remove(a.count)
next
1.Set a = nothing
2.Set a = New Collection
3.循环遍历
1.通常只在最后添加元素(数组大小自适应)
2.不能改变已添加元素的内容
3.可以任意删除指定位置(指定顺序位置/或指定key值)的元素
4.不管如何添加和删除,集合中元素始终保持添加时的先后顺序不变
1.集合中可以添加重复信息(按顺序作为新元素添加)
字典关键词不可重复(相当于以序号为关键字建立了字典)
2.集合中元素可以Write in,但不可以Rewrite.
字典中key不可以改动,但item可以任意改
Sub test5()
Dim s As New Collection
s.Add 1, CStr(1)
For i = 2 To 20 Step 2
s.Add i, CStr(i), Int(Rnd * (i - 1) + 1)
s.Add i + 1, CStr(i + 1), , Int(Rnd * i + 1)
Next
For i = 1 To 20
t1 = s.Item(i) '按现在的顺序返回集合元素
t2 = s.Item(CStr(i)) '按关键词key返回集合元素
Next
End Sub
1.必须是文本型字符串值,如果是数值要用cstr函数转换
2.key不能重复
3.key结果不能反输出(item可以按key或者index顺序输出返回值)
4.检索不存在的key值会出错
5.一般语法:a.add Item,key
来源:VBA中集合collection方法的基础知识