問題: 1 次元配列に正確に一致する値があるかどうかを見つけるより効率的な方法を探しています。基本的には booleantrue/false
です。
私は明らかな何かを見落としていますか?それとも、おそらくコレクション オブジェクトまたは辞書を使用する必要があるときに配列を使用して、間違ったデータ構造を使用しているだけですか? 後者では、.Contains
または.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
、完全一致の配列ではなく、部分一致の配列を返すことです。(部分文字列/部分一致を返すと便利な理由がわかりません。)
Match
もう 1 つの方法は、配列内の各値を文字通り反復処理することです (これも非常に一般的に使用されていると思います)。これは、Excel の関数を呼び出すよりも不必要に面倒に思えます。
For each v in vArray
If v = strSearch Then
' do stuff
End If
Next