jpi*_*912 5 vb6 collections excel vba excel-vba
环境是我推入集合的成员是无名的,无法识别的(为了避免糟糕的抽象,请不要惊慌失措:成员实际上是其他集合实例).为了能够进行快速搜索,我正在为每个新成员创建一个有意义的哈希名称,并在"最顶层"Collection的Add方法上将其作为Key字符串提供.
当我有一个密钥与seachy,一切都花花公子...问题是我想迭代集合的成员并获得Add上提供的密钥(生成的哈希,不幸的是,不可能反向哈希).
我正在继续定义插入的子集合实例的第一个成员是一个包含所提到的哈希的字符串,但是如果有人破解了这个,我将非常感激.
简单的方法是使用Dictionary而不是Collection.Dictionary本质上是键,项对的关联数组,支持将其键作为数组检索.要使用Dictionary,您需要添加对Microsoft Scripting Runtime的引用.使用字典的缺点是它不能以与集合相同的方式枚举.更复杂的解决方案是包装集合和字典以创建可枚举的字典,如下所述.
注意要使NewEnum在VBA中正常工作,必须按如下方式导出和手动编辑类模块,然后重新导入.
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Set NewEnum = someKeys.[_NewEnum]
End Property
Run Code Online (Sandbox Code Playgroud)
例
Option Explicit
Private someKeys As Dictionary
Private someCols As Collection
Public Function Add(o As Object, Key As String) As Object
someKeys.Add Key, o
someCols.Add o, Key
End Function
Public Property Get Count() As Long
Count = someCols.Count
End Property
Public Property Get Item(vKey As Variant) As Object
Set Item = someCols.Item(vKey)
End Property
Public Sub Remove(vKey As Variant)
someKeys.Remove vKey
someCols.Remove vKey
End Sub
Public Property Get NewEnum() As IUnknown
Set NewEnum = someCols.[_NewEnum]
End Property
Public Property Get Keys() As Variant
Keys = someKeys.Keys
End Property
Private Sub Class_Initialize()
Set someKeys = New Dictionary
Set someCols = New Collection
End Sub
Run Code Online (Sandbox Code Playgroud)