很早以前就在写 字典的应用及实例,可写文章对我来说实在是件苦差。 写了一小部分就停下来了。好在狼版写了 浅谈DICTIONARY(字典)对象 我这里只补充部分他没有提到的东西就轻松多了,尽管如此还是很零乱。 如有错漏,欢迎指正。 标题里有个(一)并不表示一定就有(二),之所以要留个(一)为了其他对字典了解的朋友 续写补遗留个空间,便于大家查找。 浅谈DICTIONARY(字典)对象---狼版 http://club.excelhome.net/viewthread.php?tid=265056&px=0
创建字典的两个方法 1 引用 c:\windows\system32\scrrun.dll 然后 dim d as new Dictionary 2 Set d = CreateObject("Scripting.Dictionary") 字典的四个属性 CompareMode 决定key的比较方法 BinaryCompare(默认方法) 二进制方式比较,即a,A是不同字符 TextCompare '文本方式比较,即a,A是相同字符 vbDatabaseCompare 仅用于 Microsoft Access。进行基于您自己数据库中信息的比较。 如果用recordset做key的话vbDatabaseCompare方式就有用了,因为用的少没有测试过 Count 计算字典中的条目数量 s = d.count s 是一个long值 Key 也就是Item的代码通常是整数或字符串,可以是除数组外的任何类型,在一个字典中每一个key都是唯一的 一般利用这个特点去除重复值 Item 可以是任何对象(不含自定义数据):数字,字符串,数组,对象(窗体,控件,文件。。。。) 字典的六个方法 Add 向字典添加内容 d.add "a",10000,或 d("王先生")= "010-87654321" 向字典添加对象 set d("mysheet") = Sheet1 Set d("mybook") = ThisWorkbook 注意 set 关键字 Exists 判断keys中有没有要找的key,返回 true 或 false s = d.exists("王先生"), s 是 true 因为上面已经添加了王先生 Keys 学过英文吧?Key的复数形式,返回一个一维数组 arr= d.keys Items 同上 arr = d.items Remove 按照key从字典中删除一个项目 d.remove("王先生") RemoveAll 清空字典 d.RemoveAll 此时 d.count 为 0 字典简单,好学又好用 总共10种属性方法,用过字典或自学能力强的看到这里,可以不用往下看了 字典就像一个只有两列的表,字典的行数可以有多少? 取决于内存的大小。字典更像数据库,数组的混合体 字典的两个列的“名字” 分别是 “key” 和 “item” key 是 item 的 “代号” 方便我们在程序中调用 key通常是整数或字符串,可以是除数组外的任何类型 注意数字1 和字符串“1”是不同的 item 可以把它想象成一个 垃圾桶 什么都可以 往里面装。 数字,字符串,数组,对象(窗体,控件,文件。。。。), 由于字典是不可见,抽象的,下面的表格只能想象 | 字典 | key | itme | 1 | 一个数组 | 1 | 一个窗体 | abc | 一个sheet | 88 | 字符串 | 甲 | 一个图片 | 乙 | 字符串 | 丙 | 数字 | 丁 | 字符串 | …… | …… | | | 表1 | 姓名 | 电话 | 张三 | 123456 | 李四 | 654321 |
字典的一个最大特点是 可以通过“代号”--key,也可以 通过顺序引用 如果表1是个2维数组 要取得张三的电话,只能用 电话=表1(0,1) 表示 如果不知道张三在表中的位置,只能先用循环取得张三的位置 但如果表1 是字典的话,取得张三的电话就容易的多了 电话=表1("张三"),也可以 电话=表1(表1.keys(0)) keys 和 items 字典中的两列可以单独用两个一维数组分别表示 arr1 = 表1.Keys arr2 = 表.Items
CompareMode 比较方式 TextCompare 文本方式比较,即a,A,a ,A 是相同字符 BinaryCompare '二进制方式比较,即a,A,a ,A 是不同字符 vbDatabaseCompare 仅用于 Microsoft Access。进行基于您自己数据库中信息的比较。 但不论哪种方式,数字的 123 和 字符串的"123" 永远不同 一些应用技巧 呼之即来 把arr数组中的重复值去除 Dim d As New Dictionary arr = Array(1, 1, 1, 1, 2, 3, 22, 4, 2, 24, 8, 5, 5, 4, 5, 4, 43, 6, 8, 9, 0, 0) For i = 0 To UBound(arr) s = d(arr(i)) Next arr = d.Keys 以上代码并没有用到add方法但更快速的完成了任务 如果使用add方法,就要增加错误处理 或先用Exists判断一下 变量总集 (不含自定义数据) 如果你的程序里有许多公共变量 Public aa As String, mysheet As Worksheet, cc As Long Public rc As New Recordset, rg As Range, dd As New Dictionary 如果使用字典,一个变量就搞掂 Public d As New Dictionary 在程序中随时添加,随时引用,随时删除 灵活性很大 添加: d("字串1") = "你好" Set d("表1") = Sheet1 d("长整型1") = 10000 Set d("结果集") = New Recordset Set d("单元格") = Sheet1.Range("a1:b5") Set d("字典") = New Dictionary 引用: Set rc = d("结果集") rc.Open ……… 或直接使用 d("结果集").open……… 删除: d.Remove ("结果集")
gvIJBHFD.rar
(16.98 KB, 下载次数: 1293)
|