1

配列を分割することは可能ですか?

例:

array(2) As String
array(1) = "test1"
array(2) = "test2"

~ Now Split

array1 (contains test1) & array 2 (contains test2)

二分探索を実装したい

4

3 に答える 3

0

このように分割できます

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

ご覧のとおり、このバイナリ検索は、文字列の配列で文字列が見つかったかどうかを確認するだけですが、他の目的で変更することもできます。

于 2013-08-21T17:57:13.170 に答える