配列を分割することは可能ですか?
例:
array(2) As String
array(1) = "test1"
array(2) = "test2"
~ Now Split
array1 (contains test1) & array 2 (contains test2)
二分探索を実装したい
このように分割できます
Sub split_array()
Dim array1(1 To 2) As String
Dim array2(1 To 2) As String
Dim array3(1 To 2) As String
array1(1) = "Test1"
array1(2) = "Test2"
array2(1) = array1(1)
array3(1) = array1(2)
End Sub
しかし、それは最善の方法ではないと思います。配列内の位置を表すために 3 つの (おそらく長整数) 変数を使用すると、はるかにうまくいくと思います。1 は最初の要素を表し、1 は最後の要素を表し、1 は中間要素を表します。
Dim lLowerSearchElement As Long
Dim lUpperSearchElement As Long
Dim lMiddleSearchElement As Long
Dim array1(1 to 999) as string
lLowerSearchElement = 1
lUpperSearchElement = 999
lMiddleSearchElement = (lUpperSearchElement + lLowerSearchElement) / 2
次に、要素が中央の要素と等しいか、大きいか小さいかを確認し、それに応じて続行できます。
また、バイナリ検索を使用する前にデータをソートする必要があることを覚えておいてください。再帰呼び出しについて知っていると便利です。
また、実装を厳密にテストする必要もあります。わずかなミスで検索が機能しなくなる可能性があるからです。
編集 22/08/13
二分探索に使用する実装を以下に示します。
Function bCheckSamplePoint(ByRef lSamplePointArray() As String, ByRef bfound As Boolean, _
ByVal lSamplePoint As String) As Boolean
'byref used for the array as could be slow to keep copying the array, bFound is used by calling procedure
Dim lLowerSearchElement As Long
Dim lUpperSearchElement As Long
Dim lMiddleSearchElement As Long
bfound = False 'False until found
'Set initial limits of the search
lLowerSearchElement = 0
lUpperSearchElement = UBound(lSamplePointArray())
Do While lLowerSearchElement <= lUpperSearchElement And bfound = False
lMiddleSearchElement = (lUpperSearchElement + lLowerSearchElement) / 2
If StrComp(lSamplePointArray(lMiddleSearchElement), lSamplePoint, vbTextCompare) = -1 Then
' 'Must be greater than middle element
lLowerSearchElement = lMiddleSearchElement + 1
ElseIf (lSamplePointArray(lMiddleSearchElement) = lSamplePoint) Then
bfound = True
Else
'must be lower than middle element
lUpperSearchElement = lMiddleSearchElement - 1
End If 'lSamplePointArray(lmiddlesearchlelemnt) < lSamplePoint
Loop 'While lLowerSearchElement <= lUpperSearchElement
ErrorExit:
bCheckSamplePoint = bReturn
Exit Function
ご覧のとおり、このバイナリ検索は、文字列の配列で文字列が見つかったかどうかを確認するだけですが、他の目的で変更することもできます。