【发布时间】:2014-04-21 18:52:23
【问题描述】:
作为 vba 中字典的重度用户,我发现创建一个“超级字典”类很有用,它可以处理许多我不想处理主要代码的小问题。下面是这个“超级字典”自定义对象的草稿。
这是个好主意吗?这种方法会以某种无法预料的方式影响我的词典的性能吗? (例如我的Get Item 方法很贵吗?-我经常使用它)
提前通知!
Public pDictionary As Object
Private Sub Class_Initialize()
Set pDictionary = CreateObject("Scripting.Dictionary")
End Sub
Private Sub Class_Terminate()
If Not pDictionary Is Nothing Then Set pDictionary = Nothing
End Sub
Public Property Get GetItem(Key As Variant) As Variant:
If VarType(pDictionary.Items()(1)) = vbObject Then
Set GetItem = pDictionary(Key)
Else
GetItem = pDictionary(Key)
End If
End Property
Public Property Get GetItems() As Variant:
Dim tmpArray() As Variant, i As Integer
If Not pDictionary.Count = 0 Then
ReDim tmpArray(pDictionary.Count - 1)
For i = 0 To pDictionary.Count - 1
If VarType(pDictionary.Items()(i)) = vbObject Then Set tmpArray(i) =pDictionary.Items()(i)
If Not VarType(pDictionary.Items()(i)) = vbObject Then tmpArray(i) =pDictionary.Items()(i)
Next i
Else
ReDim tmpArray(0)
End If
GetItems = tmpArray
End Property
Public Property Get GetKeys() As Variant:
GetKeys = pDictionary.Keys
End Property
Public Property Get Count() As Integer:
Count = pDictionary.Count
End Property
Public Property Get Exists(Key As Variant) As Boolean:
If IsNumeric(Key) Then Exists = pDictionary.Exists(CLng(Key))
If Not IsNumeric(Key) Then Exists = pDictionary.Exists(Key)
End Property
Public Sub Add(Key As Variant, Item As Variant):
If IsNumeric(Key) Then pDictionary.Add CLng(Key), Item
If Not IsNumeric(Key) Then pDictionary.Add Key, Item
End Sub
Public Sub AddorSkip(Key As Variant, Item As Variant):
If IsNumeric(Key) Then
If Not pDictionary.Exists(CLng(Key)) Then pDictionary.Add CLng(Key), Item
Else
If Not pDictionary.Exists(Key) Then pDictionary.Add Key, Item
End If
End Sub
Public Sub AddorError(Key As Variant, Item As Variant):
If IsNumeric(Key) Then
If Not pDictionary.Exists(CLng(Key)) Then
pDictionary.Add CLng(Key), Item
Else
MsgBox ("Double entry in Dictionary: " & Key & " already exists."): End
End If
Else
If Not pDictionary.Exists(Key) Then
pDictionary.Add Key, Item
Else
MsgBox ("Double entry in Dictionary: " & Key & " already exists"): End
End If
End If
End Sub
Public Sub Remove(Key As Variant):
If IsNumeric(Key) Then
pDictionary.Remove (CLng(Key))
Else
pDictionary.Remove (Key)
End If
End Sub
【问题讨论】:
-
这对 StackOverflow 来说不是一个真正的问题。它可能适合codereview.stackexchange.com,但这里不适合。
-
本课程打算处理哪些“小问题”?例如,尚不清楚为什么您将数字键强制转换为 Long。
-
@RBarryYoung。谢了。会坚持我的主要问题。
-
@TimWilliams。我什至还不知道所有问题。但我相信这个类将成为我在各种项目中使用的类,所以我希望有一种通用的方法。
-
为分享您的课程点赞!
标签: excel dictionary custom-object vba