首页 > 解决方案 > 如何在 VBA 中为重复键使用字典?

问题描述

根据这个实验,在数据集合中查找值的最快 VBA 方法是将数据以字典的形式放入。找到值的速度提高了 100 倍。VBA 中的字典有一个预定义的方法,名为:“.exist(key)”,用于按键查找值。但是没有预定义的方法来按值查找键。如您所知,在构建字典时,不允许重复键。当然可以使用“for”循环,但肯定会失去所获得的速度,并且对于大量数据而言,它再次效率不高。那么是否有其他解决方案可以像字典一样快速地在大量项目中找到值?谢谢

标签: vbaperformancefind

解决方案


您可以拥有两个字典,一个具有 Keys -- Values 的正常结构。另一个具有翻转结构的普通键现在是分隔字符串(“some|thing|like|this”),正常值是键。

一个例子是这样的:

Sub dictionaries()
    Dim dictnormal As Object
    Dim dictreversed As Object
    
    Set dictnormal = CreateObject("Scripting.Dictionary")
    Set dictreversed = CreateObject("Scripting.Dictionary")
    
    Dim keyarr As Variant
    
    keyarr = Array("Red", "Blue", "Green", "Yellow", "Brown")
    Dim k As Variant
    
    For Each k In keyarr
        dictnormal.Add k, 1
        If Not dictreversed.exists(dictnormal(k)) Then
            dictreversed.Add dictnormal(k), k
        Else
            dictreversed(dictnormal(k)) = dictreversed(dictnormal(k)) & "|" & k
        End If
    Next k
    
    For Each k In dictnormal
        Debug.Print "Normal Keys: " & k, "Normal Values and Reversed Keys: " & dictnormal(k), "Reversed Values: " & dictreversed(dictnormal(k))
    Next k
End Sub

我在普通字典中只有一个值,但它应该非常清楚地显示这个想法。


推荐阅读