gpt4 book ai didi

vba - 获取 Collection 对象上项目的键

转载 作者:行者123 更新时间:2023-12-02 07:33:02 24 4
gpt4 key购买 nike

环境是我插入 Collection 的成员是无名的、无法识别的(为了避免糟糕的抽象,请不要 panic :成员实际上是其他 Collection 实例)。为了能够进行快速搜索,我为每个新成员创建一个有意义的哈希名称,并将其作为“最顶层”集合的 Add 方法上的键字符串提供。

当我有一把 key 可以搜索时,一切都很顺利......问题是我想迭代集合的成员并获取在 Add 上提供的 key (生成的哈希,不幸的是不可能反转哈希)。

我将继续定义插入的子集合实例的第一个成员是一个字符串,包含提到的哈希值,但如果有人破解了这个,我将非常感激。

最佳答案

简单的方法是使用 Dictionary而不是集合。字典本质上是一个键、项对的关联数组,并支持将其键作为数组进行检索。要使用字典,您需要添加对 Microsoft 脚本运行时的引用。使用字典的缺点是它不能像集合一样进行枚举。更复杂的解决方案是将集合和字典包装起来以创建可枚举字典,如下所述。

注意要使 NewEnum 在 VBA 中正常工作,必须导出类模块并按如下方式手动编辑,然后重新导入。

Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Set NewEnum = someKeys.[_NewEnum]
End Property

示例

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

关于vba - 获取 Collection 对象上项目的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com