Pasujące wartości w tablicy łańcuchów
Problem: Szukanie bardziej efektywnego sposobu na ustalenie, czy w tablicy 1d istnieje dokładna wartość dopasowania - zasadniczo logicznatrue/false
.
Czy przeoczę coś oczywistego? Czy po prostu używam niewłaściwej struktury danych, używając tablicy, gdy prawdopodobnie powinienem używać obiektu kolekcji lub słownika? W tym drugim mogłem sprawdzić.Contains
lub.Exists
odpowiednio
W Excelu mogę sprawdzić wartość w tablicy wektorowej, takiej jak:
If Not IsError(Application.Match(strSearch, varToSearch, False)) Then
' Do stuff
End If
Zwraca dokładny indeks dopasowania, oczywiście z zastrzeżeniem ograniczeńMatch
funkcja, która znajduje tylkopierwszy dopasowywanie wartości w tym kontekście. Jest to powszechnie stosowana metoda, z której korzystam od dłuższego czasu.
Jest to wystarczające rozwiązanie dla programu Excel - ale co z innymi aplikacjami?
W innych aplikacjach mogę zrobić zasadniczo to samo, ale wymaga włączenia odwołania do biblioteki obiektów programu Excel, a następnie:
If Not IsError(Excel.Application.match(...))
Wydaje się to jednak głupie i trudne do zarządzania w plikach rozproszonych z powodu uprawnień / centrum zaufania / etc.
Próbowałem użyćFiltr() funkcjonować:
If Not Ubound(Filter(varToSearch, strSearch)) = -1 Then
'do stuff
End If
Ale problem z tym podejściem jest takiFilter
zwraca tablicę dopasowań częściowych, a nie tablicę dokładnych dopasowań. (Nie mam pojęcia, dlaczego byłoby użyteczne zwrócenie podciągów / częściowych dopasowań).
Inną alternatywą jest dosłownie iterowanie każdej wartości w tablicy (co, jak sądzę, jest również powszechnie używane) - co wydaje się jeszcze bardziej niepotrzebnie kłopotliwe niż wywołanie programu ExcelMatch
funkcjonować.
For each v in vArray
If v = strSearch Then
' do stuff
End If
Next