Valores correspondentes na matriz de cadeias
Problema: Procurando por uma maneira mais eficiente de descobrir se existe um valor exato correspondente em uma matriz 1d - essencialmente um valor booleanotrue/false
.
Eu estou negligenciando algo óbvio? Ou eu estou simplesmente usando a estrutura de dados errada, usando uma matriz quando eu provavelmente deveria estar usando um objeto de coleção ou um dicionário? Neste último eu poderia verificar o.Contains
ou.Exists
método, respectivamente
No Excel, posso verificar um valor em uma matriz vetorial como:
If Not IsError(Application.Match(strSearch, varToSearch, False)) Then
' Do stuff
End If
Isso retorna um índice de correspondência exata, obviamente sujeito a limitações deMatch
função que só encontra oprimeiro valor correspondente neste contexto. Este é um método comumente usado e que eu tenho usado há muito tempo também.
Isso é satisfatório o suficiente para o Excel - mas e quanto a outros aplicativos?
Em outros aplicativos, posso fazer basicamente a mesma coisa, mas requer a ativação da referência à biblioteca de objetos do Excel e, em seguida:
If Not IsError(Excel.Application.match(...))
Isso parece bobo, porém, e é difícil de gerenciar em arquivos distribuídos por causa de permissões / centro de confiança / etc.
Eu tentei usar oFiltro() função:
If Not Ubound(Filter(varToSearch, strSearch)) = -1 Then
'do stuff
End If
Mas o problema com essa abordagem é queFilter
retorna uma matriz de correspondências parciais, em vez de uma matriz de correspondências exatas. (Eu não tenho idéia por que seria útil para retornar correspondências substring / partial.)
A outra alternativa é literalmente iterar sobre cada valor na matriz (isso também é muito comumente usado eu acho) - o que parece ainda mais desnecessariamente complicado do que chamar no ExcelMatch
função.
For each v in vArray
If v = strSearch Then
' do stuff
End If
Next