问题:寻找一种更有效的方法来查找一维数组中是否存在精确匹配的值——本质上是一个 boolean true/false
。
我是否忽略了一些明显的东西?还是我只是使用了错误的数据结构,当我可能应该使用集合对象或字典时使用数组?在后者中,我可以分别检查.Contains
or.Exists
方法
在 Excel 中,我可以检查向量数组中的值,例如:
If Not IsError(Application.Match(strSearch, varToSearch, False)) Then
' Do stuff
End If
这将返回一个完全匹配索引,显然受限于仅在此上下文中Match
找到第一个匹配值的函数的限制。这是一种常用的方法,我也用了很长时间。
这对于 Excel 来说已经足够令人满意了——但是其他应用程序呢?
在其他应用程序中,我可以做基本相同的事情,但需要启用对 Excel 对象库的引用,然后:
If Not IsError(Excel.Application.match(...))
但是,这似乎很愚蠢,并且由于权限/信任中心/等原因,很难对分布式文件进行管理。
我尝试使用Filter()函数:
If Not Ubound(Filter(varToSearch, strSearch)) = -1 Then
'do stuff
End If
但是这种方法的问题是Filter
返回一个部分匹配的数组,而不是一个完全匹配的数组。(我不知道为什么返回子字符串/部分匹配会很有用。)
另一种选择是逐字迭代数组中的每个值(我认为这也是非常常用的)——这似乎比调用 Excel 的Match
函数更加不必要的麻烦。
For each v in vArray
If v = strSearch Then
' do stuff
End If
Next