一、字典基础知识
字典是一种基于键值对存储数据的对象,也称键值对集合。每个键值对表示一组相关的数据,它由一个键和一个值组成。键在字典中必须唯一,而值则可以重复。在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
以上代码先计算数组元素的平均值,然后将每个元素与平均值的偏差添加到字典中,偏差可用于后续统计分析。