本博客里Collection=List=列表,array=arr=数组,CreateObject(“Scripting.Dictionary”)生成的对象=Dictionary=dict=dic=字典。
注意dict(“X”)会dict add “X”,Empty,Dictionary是有序的字典
Sub testCollection()
Dim x As New Collection
x.Add "a0"
x.Add "a9"
x.Add "a5", "a5key"
t1 = x("a5key") '''a5
t2 = x(x.Count) '''a5
x.Add "a4", "a4key", "a5key" 'before:="a5key"
x.Add "a6", "a6key", , "a5key" 'after:="a5key"
t3 = x("a6key") '''a6
For Each v In x 'easy traversal method
Debug.Print v '''a0,a9,a4,a5,a6
Next
x.Remove (4) 'index from 1,so remove a5
For v = 1 To x.Count 'if will edit,use this method
Debug.Print x(v) 'a0,a9,a4,a6
Next
End Sub
Sub testDict()
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "C", 500 '''way 2:put key value
dict.Add "A", 300
dict.Add "B", 400
For Each k In dict 'use this method
Debug.Print k & "-->" & dict(k)
Next
k = dict.keys
v = dict.items
For i = 0 To dict.Count - 1
Key = k(i)
Value = v(i)
Debug.Print Key & "-->" & Value
Next
n = dict.Count '''3
dict.Remove ("A") '''dict.count-- dict={C:500,B:400}
Value = dict.Item("B")
dict.Item("B") = 1000 '''dict={C:500,B:1000}
dict.Item("D") = 800 '''dict={C:500,B:1000,D:800} '''way 2:put key value
hasX = dict.exists("X") '''false
x = dict("X") '''x=Empty,dict={C:500,B:1000,D:800,X:Empty}
hasX = dict.exists("X") '''true
dict.RemoveAll '''dict.count=0 dict={}
End Sub
List内嵌arr,list和dict:
- 内部元素可以是arr,list和dict
- list内部的list和dict全是引用,把list2和dic1加入list1,修改list1里的list2和dic1会影响list2和dic1,修改list2和dic1也会影响list1里的list2和dic1
- list里的arr不是引用,和加入前的arr是不同的对象。修改list里的arr会报错
Sub testList()
Dim arr1(111), arr2(111)
Set li1 = New Collection
Set li2 = New Collection
Set dic1 = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary")
li1.Add (arr1)
li1.Add (li2)
li1.Add (dic1)
arr1(3) = "arr3" 'only arr1 change
li2.Add (3)
li2.Add (4)
dic1.Add "3key", "3item"
dic1.Add "4key", li2
q = li1(1)
q(4) = "arr4" 'only q change
li1.Add (q)
li1(1)(5) = "arr5" 'nothing change!!!
'li1(1) = q 'error,can not change
Set q1 = dic1("4key") 'get dic1
Set q2 = li1(3)("4key") 'get dic1
li2.Remove (2) 'li1(2) and li2 both remove the item
li1(2).Remove (1) 'li1(2) and li2 both remove the item
dic1.Remove "3key" 'li1(3) and dic1 both remove the item
li1(3).Remove "4key" 'li1(3) and dic1 both remove the item
End Sub
Dict内嵌arr,list和dict:
- item(value)可以是arr,list和dict
- dict内部的list和dict全是引用,把list2和dic1加入dic1,修改dic1里的list2和dic1会影响list2和dic1,修改list2和dic1也会影响dic1里的list2和dic1
- dic里的arr不是引用,和加入前的arr是不同的对象。修改list里的arr无效
- key可以是list和dict,但是用key取得对应的item时胡报错,所以可以认为没有用
- key不可以是arr
Sub testDict1()
Dim arr1(111), arr2(111)
'Dim dic1 As dictionary
Set li1 = New Collection
Set li2 = New Collection
Set dic1 = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary")
dic1.Add "1", "1item"
dic1.Add li1, li2
dic1.Add dic2, dic2
' dic1.Add arr1, arr2
li1.Add 1
li1.Add 1
li1.Add 1
li2.Add 2
'x = dic1(arr1)
Set li = Nothing
Set dic1 = Nothing
End Sub
Sub testDict2()
Dim arr1(111)
Set li1 = New Collection
Set li2 = New Collection
Set dic1 = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary")
'dic1={1:li1,2:{3:li2},4:arr1}
dic1.Add 1, li1
dic1.Add 2, dic2
dic1.Add 4, arr1
dic2.Add 3, li2
Set q1 = dic1(1)
Set q2 = dic1(2)
Set q3 = q2(3)
li1.Add 1
li1.Add 3
li1.Add 2
li2.Add 2
arr1(1) = 1
q4 = dic1(4)
q4(2) = 2
q5 = dic1(4)
dic1(4)(3) = 3
q6 = dic1(4)
dic1(4) = Empty
q7 = dic1(4)
End Sub