一、字典基础知识
字典是一种基于键值对存储数据的对象,也称键值对集合。每个键值对表示一组相关的数据,它由一个键和一个值组成。键在字典中必须唯一,而值则可以重复。在VBA中,可以使用“Scripting.Dictionary”类创建字典对象。
Dim myDict As New Scripting.Dictionary
以上代码使用“New”关键字和“Scripting.Dictionary”类创建了一个名为“myDict”的字典对象。
二、字典相关操作
1. 添加键值对
在字典中,可以使用“Add”方法添加键值对,其语法为:
myDict.Add Key, Value
其中,Key和Value为要添加的键值对。在实际使用中,可以用循环结构读入数据并依次添加到字典中,示例如下:
For i = 1 To 5 myDict.Add i, "Value " & i Next i
2. 删除键值对
使用“Remove”方法可以删除指定键值对,其语法为:
myDict.Remove Key
其中,Key为要删除的键。以下代码删除了字典中键值为“2”的键值对:
myDict.Remove 2
3. 修改键值对
在字典中,可以直接修改已经存在的键值对。以修改键值为“3”的键值对为例:
myDict(3) = "New Value"
4. 查找键值对
使用字典的“Exists”方法可以判断指定键是否存在,其语法为:
myDict.Exists Key
若指定的键存在,则返回True;反之,则返回False。
有时需要根据值查找对应的键,可以使用“Keys”方法返回所有键值,然后根据值进行遍历比较,找到匹配的键。以下代码查找值为“Value 3”的键:
For Each key In myDict.Keys If myDict(key) = "Value 3" Then MsgBox "Key: " & key Exit For End If Next key
三、字典应用案例
1. 统计词频
字典可以很好地实现文本词频统计。以下代码读入文本数据,统计每个单词出现的次数,并将结果存储在字典中:
Dim myDict As New Scripting.Dictionary Dim text As String Dim words() As String ' 读入文本数据 text = "The quick brown fox jumped over the lazy dog. The dog slept over the veranda." words = Split(text, " ") ' 统计单词词频 For i = 0 To UBound(words) If Not myDict.Exists(words(i)) Then ' 不存在,则添加 myDict.Add words(i), 1 Else ' 存在,则累加 myDict(words(i)) = myDict(words(i)) + 1 End If Next i
通过以上代码,可以得到每个单词出现的次数,并进行其他后续操作,如排序、筛选等。
2. 存储自定义对象
字典不仅可以存储基本数据类型,还可以存储自定义对象。以下代码演示了如何将员工对象存储到字典中:
' 定义员工对象 Class Employee Public Name As String Public Age As Integer End Class ' 创建字典对象 Dim myDict As New Scripting.Dictionary ' 创建员工对象 Dim e1 As New Employee e1.Name = "Jack" e1.Age = 30 Dim e2 As New Employee e2.Name = "Lucy" e2.Age = 25 ' 将员工对象添加到字典中 myDict.Add "Jack", e1 myDict.Add "Lucy", e2
通过以上代码,可以将多个员工对象存储在同一个字典对象中,并以姓名为键进行快速查找和访问。
3. 计算平均数
字典可以方便地计算多个数值的平均值。以下代码演示了如何利用字典实现数组元素平均值的计算:
' 定义数组 Dim numbers() As Double numbers = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) ' 计算元素平均值 Dim sum As Double Dim myDict As New Scripting.Dictionary For i = 0 To UBound(numbers) sum = sum + numbers(i) Next i Dim avg As Double avg = sum / (UBound(numbers) + 1) ' 将元素与平均值偏差添加到字典中 For i = 0 To UBound(numbers) myDict.Add i, numbers(i) - avg Next i
以上代码先计算数组元素的平均值,然后将每个元素与平均值的偏差添加到字典中,偏差可用于后续统计分析。