使用其键 (VBA) 检索存储在集合中的对象的索引

jal*_*910 2 vba

我在 VBA 中有一个包含多个元素的集合,这些元素中的每一个都有一个分配的键。

我想知道给定元素在集合中使用其键的位置。我能想到的唯一方法是在集合中循环,直到我得到我想要的项目,有没有更快的方法?

谢谢

Rub*_*uck 5

基本上,没有。没有更快的方法。至少不使用集合。这是我所知道的在集合中查找项目索引的最快方法。

' returns index of item if found, returns 0 if not found
Public Function IndexOf(ByVal coll As Collection, ByVal item As Variant) As Long
    Dim i As Long
    For i = 1 To coll.Count
        If coll(i) = item Then
            IndexOf = i
            Exit Function
        End If
    Next
End Function
Run Code Online (Sandbox Code Playgroud)

请注意,我们在找到第一个匹配项后立即退出该函数。该算法具有O(n)的平均和最坏情况,其中n是集合中的项目数。

我认为您希望能够找到索引可能还有另一个原因,因此我建议您也查看一下Scripting.DictionaryMicrosoft Scripting Runtime 库中的 。同时,也无法通过键值(循环除外)获取项的索引,您实际上可以从字典中检索键值,而不仅仅是项。我怀疑您可能会问这个问题,因为内置Collection对象中缺乏这种能力。

  • 这是一个很好的解决方案。请注意,如果您存储了对象,则 VBA 需要 `is`,因此代码行变为 `If coll(i) is item Then`。 (2认同)