我在VBA中寻找一种高效的数据结构,它允许我在一个“列”中查找值并在另一列中找到相应的值。所有列都具有相同的固定长度。
基本上我有2个Enums
,每个都有 n 项,还有一个 n 字符串数组;我想从任何这些集合中传递i th 值,并从另一个指定集合中返回i th 值
一个选项是Collection
Arrays
; Collection将具有与列表类型相对应的键(例如Enum1
,Enum2
,StringList
),并且我将能够创建一个带有两个列表键和查找值的函数作为参数,并使用循环返回第二列中的相应值:
Function findCorresponding(dataTable As Collection, header1 As String, header2 As String, lookupVal As Variant) As Variant
Set array1= dataTable(header1) 'pick out array from collection
For i = Lbound(array1) To Ubound(array1) 'loop through to find lookup val
If array1(i) = lookupVal Then Exit For
Next i
findCorresponding = dataTable(header2)(i) 'return corresponding val
End Function
当然,我可以用非键控集合替换查找数组,以避免循环。但这似乎不是最有效的方式(我相信dictionaries
哈希而不是循环,所以在这方面会更快,但与阵列相比有更多额外的包袱)
我真正想要的是Scripting.Dictionary
,您可以访问values
和keys
,并使用一个来获取另一个。但是使用其他两个中的任何一个都可以找到第三个参数,并且可以用来查找其他两个中的任何一个。
如果某些内容扩展到 n 列也很有用