Collection和Dictionary简单用法

28 篇文章 2 订阅

本博客里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:

  1. 内部元素可以是arr,list和dict
  2. list内部的list和dict全是引用,把list2和dic1加入list1,修改list1里的list2和dic1会影响list2和dic1,修改list2和dic1也会影响list1里的list2和dic1
  3. 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:

  1. item(value)可以是arr,list和dict
  2. dict内部的list和dict全是引用,把list2和dic1加入dic1,修改dic1里的list2和dic1会影响list2和dic1,修改list2和dic1也会影响dic1里的list2和dic1
  3. dic里的arr不是引用,和加入前的arr是不同的对象。修改list里的arr无效
  4. key可以是list和dict,但是用key取得对应的item时胡报错,所以可以认为没有用
  5. 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

arr无法内嵌list和dict

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值