最新消息:学生作文网,您身边的作文指导专家!

字典用途及用法不少于400字 c 字典的用法

字数作文 zuowen 1浏览

【 – 字数作文】

篇一:《字典的用法》

[分享] 常见字典用法集锦及代码详解 [复制链接]

前言

凡是上过学校的人都使用过字典,从新华字典、成语词典,到英汉字典以及各种各样数不胜数的专业字典,字典是上学必备的、经常查阅的工具书。有了它们,我们可以很方便的通过查找某个关键字,进而查到这个关键字的种种解释,非常快捷实用。

凡是上过EH论坛的想学习VBA里面字典用法的,几乎都看过研究过northwolves狼版主、oobird版主的有关字典的精华贴和经典代码。我也是从这里接触到和学习到字典的,在此,对他们表示深深的谢意,同时也对很多把字典用得出神入化的高手们致敬,从他们那里我们也学到了很多,也得到了提高。

字典对象只有4个属性和6个方法,相对其它的对象要简洁得多,而且容易理解使用方便,功能强大,运行速度非常快,效率极高。深受大家的喜爱。

本文希望通过对一些字典应用的典型实例的代码的详细解释来给初次接触字典和想要进一步了解字典用法的朋友提供一点备查的参考资料,希望大家能喜欢。

给代码注释估计是大家都怕做的,因为往往是出力不讨好的,稍不留神或者自己确实理解得不对,还会贻误他人。所以下面的这些注释如果有不对或者不妥当的地方,请大家跟帖时指正批评,及时改正。

字典的简介

字典(Dictionary)对象是微软Windows脚本语言中的一个很有用的对象。

附带提一下,有名的正则表达式(RegExp)对象和能方便处理驱动器、文件夹和文件的(FileSystemObject )对象也是微软Windows脚本语言中的一份子。

字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)联合组成。就好像一本字典书一样,是由很多生字和对它们对应的注解所组成。比如字典的“典”字的解释是这样的:

“典”字就是具有唯一性的关键字,后面的解释就是它的项,和“典”字联合组成一对数据。

常用关键字英汉对照:

Dictionary 字典

Key 关键字

Item 项,或者译为 条目

字典对象的方法有6个:Add方法、Keys方法、Items方法、Exists方法、Remove方法、RemoveAll方法。

Add方法

向 Dictionary 对象中添加一个关键字项目对。

object.Add (key, item)

参数

object

必选项。总是一个 Dictionary 对象的名称。

key

必选项。与被添加的 item 相关联的 key。

item

必选项。与被添加的 key 相关联的 item。

说明

如果 key 已经存在,那么将导致一个错误。

常用语句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

代码详解

1、Dim d :创建变量,也称为声明变量。变量d声明为可变型数据类型(Variant),d后面没有写数据类型,默认就是可变型数据类型(Variant)。也有写成Dim d As Object的,声明为对象。

2、Set d = CreateObject("Scripting.Dictionary"):创建字典对象,并把字典对象赋给变量d。这是最常用的一句代码。所谓的“后期绑定”。用了这句代码就不用先引用c:\windows\system32\scrrun.dll了。

3、d.Add "a", "Athens":添加一关键字”a”和对应于它的项”Athens”。

4、d.Add "b", “Belgrade”:添加一关键字”b”和对应于它的项”Belgrade”。

5、d.Add "c", “Cairo”:添加一关键字”c”和对应于它的项”Cairo”。

Exists方法

如果 Dictionary 对象中存在所指定的关键字则返回 true,否则返回 false。

object.Exists(key)

参数

object

必选项。总是一个 Dictionary 对象的名称。

key

必选项。需要在 Dictionary 对象中搜索的 key 值。

常用语句:

Dim d, msg$

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

If d.Exists("c") Then

msg = "指定的关键字已经存在。"

Else

msg = "指定的关键字不存在。"

End If

代码详解

1、Dim d, msg$ :声明变量,d见前例;msg$ 声明为字符串数据类型(String),一般写法为Dim msg As String。String 的类型声明字符为美元号 ($)。

2、If d.Exists("c") Then:如果字典中存在关键字”c”,那么执行下面的语句。

3、msg = "指定的关键字已经存在。" :把"指定的关键字已经存在。"字符串赋给变量msg。

4、Else :否则执行下面的语句。

5、msg = "指定的关键字不存在。" :把"指定的关键字不存在。"字符串赋给变量msg。

6、End If :结束If ElseEndif判断。

Keys方法

返回一个数组,其中包含了一个 Dictionary 对象中的全部现有的关键字。

object.Keys( )

其中 object 总是一个 Dictionary 对象的名称。

常用语句:

Dim d, k

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

k=d.Keys

[B1].Resize(d.Count,1)=Application.Transpose(k)

代码详解

1、Dim d, k :声明变量,d见前例;k默认是可变型数据类型(Variant)。

2、k=d.Keys:把字典中存在的所有的关键字赋给变量k。得到的是一个一维数组,下限为0,上限为d.Count-1。这是数组的默认形式。

3、[B1].Resize(d.Count,1)=Application.Transpose(k) :这句代码是很常用很经典的代码,所以这里要多说一些。

Resize是Range对象的一个属性,用于调整指定区域的大小,它有两个参数,第一个是行数,本例是d.Count,指的是字典中关键字的数量,整本字典中有多少个关键字,本例d.Count=3,因为有3个关键字。呵呵,是不是说多了。

第二个是列数,本例是1。这样=左边的意思就是:把一个单元格B1调整为以B1开始的一列单元格区域,行数等于字典中关键字的数量d.Count,就是把单元格B1调整为单元格区域B1:B3了。

=右边的k是个一维数组,是水平排列的,我们知道Excel工作表函数里面有个转置函数Transpose,用它可以把水平排列的置换成竖向排列。但是在VBA中不能直接使用该工作表函数,需要通过Application对象的WorksheetFunction属性来使用它。所以完整的写法是Application. WorksheetFunction.Transpose(k),中间的WorksheetFunction可省略。现在可以解释这句代码了:把字典中所有的关键字赋给以B1单元格开始的单元格区域中。

Items方法

返回一个数组,其中包含了一个 Dictionary 对象中的所有项目。

object.Items( )

其中 object 总是一个 Dictionary 对象的名称。

常用语句:

Dim d, t

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

t=d.Items

[C1].Resize(d.Count,1)=Application.Transpose(t)

代码详解

1、Dim d, t :声明变量,d见前例;t默认是可变型数据类型(Variant)。

2、t=d.Items :把字典中所有的关键字对应的项赋给变量t。得到的也是一个一维数组,下限为0,上限为d.Count-1。这是数组的默认形式。

3、[C1].Resize(d.Count,1)=Application.Transpose(t) :有了上面Keys方法的解释这句代码就不用多说了,就是把字典中所有的关键字对应的项赋给以C1单元格开始的单元格区域中。

Remove方法

Remove 方法从一个 Dictionary 对象中清除一个关键字,项目对。

object.Remove(key )

其中 object 总是一个 Dictionary 对象的名称。

key

必选项。key 与要从 Dictionary 对象中删除的关键字,项目对相关联。

说明

如果所指定的关键字,项目对不存在,那么将导致一个错误。{字典用途及用法不少于400字}.

常用语句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

……

d.Remove(“b”)

代码详解

1、d.Remove(“b”):清除字典中”b”关键字和与它对应的项。清除之后,现在字典里只有2个关键字了。

RemoveAll方法

RemoveAll 方法从一个 Dictionary 对象中清除所有的关键字,项目对。

object.RemoveAll( )

其中 object 总是一个 Dictionary 对象的名称。

常用语句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

……

d.RemoveAll

代码详解

1、d.RemoveAll:清除字典中所有的数据。也就是清空这字典,然后可以添加新的关键字和项,形成一本新字典。

字典对象的属性有4个:Count属性、Key属性、Item属性、CompareMode属性。 Count属性

返回一个Dictionary 对象中的项目数。只读属性。

object.Count

其中 object一个字典对象的名称。

常用语句:

Dim d,n%

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

n = d.Count

代码详解

1、Dim d, n% :声明变量,d见前例;n被声明为整型数据类型(Integer)。一般写法为Dim n As Integer 。 Integer 的类型声明字符为百分比号 (%)。

2、n = d.Count :把字典中所有的关键字的数量赋给变量n。本例得到的是3。

Key属性

在 Dictionary 对象中设置一个 key。

object.Key(key) = newkey

参数:

object

必选项。总是一个字典 (Dictionary) 对象的名称。

key

必选项。被改变的 key 值。

newkey

必选项。替换所指定的 key 的新值。

说明

如果在改变一个 key 时没有发现该 key,那么将创建一个新的 key 并且其相关联的 item 被设置为空。

常用语句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

d.Key("c") = "d"

代码详解

1、d.Key("c") = "d" :用新的关键字”d”来替换指定的关键字”c”,这时,字典中就没有

篇二:《字典用法的补充》

字典用法的补充—index函数

很多前辈都谈过字典的用法,而我这里要说的是关于在字典中取key和item的值的方法。 这个是我在回答… &extra=page%3D1这个帖子时想到的。 引用: 1 2 3 4 5 1 2 3

取上面数据其中出现只有一次的数据放到sheet2中。

我首先想到的就是用字典,于是就有了下面的部分代码: 代码: Sub cc()

Dim i&, arr, d As Object

arr = Range([a1], [a65536].End(3))

Set d = CreateObject("Scripting.Dictionary") For i = 1 To UBound(arr) d(arr(i, 1)) = d(arr(i, 1)) + 1 Next

至此,字典完成,在keys中,分别是1、2、3、4、5,在items中分别是2、2、2、1、1。 现在要把item为1的key提取出来,以往我的想法是: 代码:

s = d.keys ss = d.items

For i = 0 To UBound(ss) If ss(i) = 1 Then brr(j) = s(i) End If Next

即:分别把keys和items赋给s和ss,然后对比,将item中等于1的key传递到另一个数组中。 这时,我突然记起,取数组arr的第n行赋值到某行区域的代码:[a6:c6]=Application.Index(arr,n) 于是想到,用index函数可以取字典中的值吗? 接着,我开始修改代码,便有了下面: 代码:

For i = 1 To d.Count

If Application.WorksheetFunction.Index(d.items, i) > 1 Then d.Remove Application.WorksheetFunction.Index(d.keys, i) End If Next

我用Sheet2.[a1].Resize(d.Count) = WorksheetFunction.Transpose(d.keys)一试,结果却多了一个

2,成了2、4、5。此时才醒悟,在删除时,一般都是逆向的,以免下面的数据取代了已删除数据的位置,于是就有了最终的代码。 代码: Sub cc()

Dim i&, arr, s, d As Object 'On Error Resume Next

arr = Range([a1], [a65536].End(3))

Set d = CreateObject("Scripting.Dictionary") For i = 1 To UBound(arr) d(arr(i, 1)) = d(arr(i, 1)) + 1 Next

For i = d.Count To 1 Step -1

If Application.WorksheetFunction.Index(d.items, i) > 1 Then d.Remove Application.WorksheetFunction.Index(d.keys, i) End If Next

Sheet2.[a1].Resize(d.Count) = WorksheetFunction.Transpose(d.keys) End Sub

这样,省去了很多代码,少走了弯路,也提高了速度。

总结:Application.WorksheetFunction.Index(d.items, i)这个方法有很多的应用之处,以前很少看到别人用,现在发现了它的好处,便拿来与大家分享。 以上个人见解,有不当之处,请各位达人指教。

ivan9025 于 2010-1-2 02:11如果单考虑执行效率,用不着套用函数index呀(楼主是不是走远了……),例如: Sub cc()

Dim i&, arr, s, d As Object 'On Error Resume Next

arr = Range([a1], [a65536].End(3))

Set d = CreateObject("Scripting.Dictionary") For i = 1 To UBound(arr) d(arr(i, 1)) = d(arr(i, 1)) + 1 Next

For i = d.Count To 1 Step -1

If d(d.keys(i)) > 1 Then d.Remove d.keys(i) '按你的愿意(这样,省去了很多代码,少走了弯路,也提高了速度。),甚至可以是——If d.Items(i) > 1 Then d.Remove d.keys(i),因为d(d.keys(i))<=>d.Items(i) Next

Sheet2.[a1].Resize(d.Count) =application.Transpose(d.keys) End Sub

d可以看成一个二维数组,d.keys和d.items分别是存在对应关系的一维数组……

换而言之:既有d.count的属性,就会有d.keys(i)和d.Items(i)的方法,提供序号就可访问他们

转载请注明:中小学优秀作文大全_作文模板_写作指导_范文大全 » 字典用途及用法不少于400字 c 字典的用法