一、字典基礎知識
字典是一種基於鍵值對存儲數據的對象,也稱鍵值對集合。每個鍵值對表示一組相關的數據,它由一個鍵和一個值組成。鍵在字典中必須唯一,而值則可以重複。在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
以上代碼先計算數組元素的平均值,然後將每個元素與平均值的偏差添加到字典中,偏差可用於後續統計分析。
原創文章,作者:VTKBF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/335041.html
微信掃一掃
支付寶掃一掃