【20180919】- VBA中数组、集合和字典(五)——字典的常用方法和属性
大家好,我是中药党。
上次我们学习了集合的基础常用方法,这回我们一块学习一下ExcelVBA中字典(Dictionary)对象的相关知识。在概念篇说过,字典不是VBA内置的类型,它是Windows脚本语言的。字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)联合组成的一个集合。
因为字典和集合中的方法属性有很多相似之处,也很容易混淆,我们今天就边对比上次的集合相关知识边来学习一下字典的常用方法和属性吧。
1. Add方法
Add语法:object.Add key, item
乍一看,字典添加成员的方法怎么和集合一样啊,只是在Add方法里没有集合添加成员的两个可选参数before和after。集合和字典添加成员的方法参数确实很像,我们一定要注意字典和集合中Add方法的区别:
①参数顺序不同。集合中的参数顺序是object.Add item,[key],而字典中的参数顺序是object.Add key, item,集合中是先item后key,字典中是先key后item,使用的时候千万别混淆了。
②对于字典来说,key和item两个都是必选参数;而集合中key是可选参数。
虽然语法中没有对参数的数据类型有要求,但是我们在添加成员的过程中,尽量不要使用对象作为key,应该使用字符串、数字等简单类型。
2.Item属性
等等,有的小伙伴看到这一定会问了,在集合中Item是方法,在字典中Item怎么就变成属性了,是不是写错了呢?
先别急,小伙伴们先看字典和集合对Item的描述:
字典Item属性:对Dictionary 对象中指定的 Key,设置或返回一个Item。
集合Item方法:是利用位置或Key返回Collection 对象的指定成员。
下边看看字典和集合中Item的相同点和不同点:
①字典的Item属性和集合的Item方法都可以根据key得到item,如下图:
②集合中的数字索引代表的是集合中成员的位置,而字典中的数字索引必须在Add的时候添加,仅仅表示和item对应的一个key,不代表字典成员在字典中的位置。如下图:
③因为字典中的Item是属性,所以既可以通过key得到属性的值,也可以通过key向属性赋值。而集合中的Item是方法,只能通过该方法取得成员的值,而不能向成员赋值。如下图:
④如果字典中没有指定的key,字典的Item属性可以通过赋值操作,直接完成字典成员的添加(类似Add方法)。另外和集合一样,Item属性也是字典对象的缺省操作,object.Item(key)和object(item)是相同的。如下图:
3.Key属性
Key属性:在一个 Dictionary对象中设置一个 key。
字典的Key属性就是用来修改key值的,就和Item属性可以用来设置修改item值是一样的。在集合中无法修改key值,没有和字典相似的方法属性。
4.Count属性
和集合中的Count属性一样,返回字典对象中的条目数。是一个只读属性的值。
5.Keys方法和Items方法
从名称上看字典中Keys方法和Items方法,多了个后缀S,就能感受出来这两个方法返回的应该是一组值。看一下这两个方法的描述:
Keys方法:返回一个数组,该数组包含一个 Dictionary 对象中的全部已有的关键字key。
Items方法:返回一个数组,该数组包含一个 Dictionary 对象中的全部已有的条目item。
这两个方法取得的数组集合可用来循环遍历字典中的成员。
6.Exists方法
Exists方法用来判断字典中是否有指定key的item,如果在 Dictionary对象中指定的关键字存在,返回 True,若不存在,返回 False。
7.Remove和RemoveAll方法
Remove方法:从一个 Dictionary对象中删除一个关键字(key)和条目对(item)。和集合中的使用方法一样,通过索引删掉成员。
RemoveAll方法:从 Dictionary对象中删除所有关键字(key)和条目对(item)。
这两个方法用法也很简单,如下图:
8.CompareMode属性
细心的小伙伴们应该已经发现了,在上面介绍每个方法和属性的本地窗口中,字典对象中除了Item属性和Count属性,还有一个CompareMode属性,这个属性是有什么用呢?
CompareMode属性是设置或返回某个 Dictionary 对象中的比较字符串关键字的比较模式。
CompareMode属性有3个值,主要用的也是前两个枚举值,如下图:
常数 |
值 |
描述 |
vbBinaryCompare |
0 |
进行二进制比较。 |
vbTextCompare |
1 |
进行文字比较。 |
vbDatabaseCompare |
2 |
仅用于 Microsoft Access。进行基于您自己数据库中信息的比较。 |
字典的CompareMode属性只能在未包含数据的时候进行更改,如果试图对已经包含数据的字典对象的比较模式进行更改的话,就会出错。缺省状态下,CompareMode参数的值为BinaryCompare,表示字符串的比较是用二进制比较,最明显的特点就是区分大小写字母,大写字母和小写字母是两个不同的字符,如下图:
如果设置CompareMode属性为vbTextCompare,在字典中的字符串就不区分大小写字母,再执行上边的代码,就会报错,因为字典中的key值不能重复。如下图:
今天,我们一块学习了字典的属性和方法,比对着集合的属性和方法,我们也一块找出了他们之间的相同和相异之处,在今后使用字典,数组和集合的过程中,希望小伙伴们不要混淆他们之间相似的概念,相似的方法和属性,在合适的场景有选择地使用它们解决遇到的问题。