开发者

filter an array using another array vb6

how do i f开发者_如何学Cilter an array using another array vb6

Edit given an array A, remove all elements in array B from array A


In that case, I'd just sort one array, then iterate through the second, deleting things from the first array if they are found. This algorithm seems to take O(n lg n) and does what you want it to do.


Assuming they are integer arrays:

Dim FilteredArray() As Integer
Dim X as Long
Dim Y as Long
Dim Z as Long
Dim bDupe as Boolean

Z = -1
For X = 0 to UBound(A)
     bDupe = False
     For Y = 0 to UBound(B)
          If A(X) = B(Y) Then
               bDupe = True
               Exit For
          End If
     Next
     If Not bDupe Then
          Z = Z + 1
          ReDim Preserve FilteredArray(Z)
          FilteredArray(Z) = A(X)
     End If
Next


Try something like this

Option Explicit

Private Sub Form_Load()
    Dim vElem           As Variant

    For Each vElem In SubstractArray(Array("aa", "b", "test"), Array("c", "aa", "test"))
        Debug.Print vElem
    Next
End Sub

Private Function SubstractArray(arrSrc As Variant, arrBy As Variant) As Variant
    Dim cIndex          As Collection
    Dim vElem           As Variant
    Dim vRetVal         As Variant
    Dim lIdx            As Long

    If UBound(arrSrc) < LBound(arrSrc) Then
        Exit Function
    End If
    '--- build index collection
    Set cIndex = New Collection
    For Each vElem In arrBy
        cIndex.Add vElem, "#" & vElem
    Next
    '--- allocate output array
    lIdx = LBound(arrSrc)
    ReDim vRetVal(lIdx To UBound(arrSrc)) As Variant
    '--- iterate source and seek in index
    For Each vElem In arrSrc
        On Error Resume Next
        IsObject cIndex("#" & vElem)
        If Err.Number <> 0 Then
            vRetVal(lIdx) = vElem
            lIdx = lIdx + 1
        End If
        On Error GoTo 0
    Next
    '--- shrink output array
    If lIdx = LBound(vRetVal) Then
        vRetVal = Split(vbNullString)
    Else
        ReDim Preserve vRetVal(0 To lIdx - 1) As Variant
    End If
    SubstractArray = vRetVal
End Function


i have found the answer myself, thanks for all who contributed

Function FilterArray(ByVal Source As String, ByVal Search As String, Optional _
    ByVal Keep As Boolean = True) As String


    Dim i As Long
    Dim SearchArray()      As String
    Dim iSearchLower       As Long
    Dim iSearchUpper       As Long

    If LenB(Source) <> 0 And LenB(Search) <> 0 Then
        SearchArray = Split(Search, " ")
    Else
        FilterArray = Source
        Exit Function
    End If
    iSearchLower = LBound(SearchArray)
    iSearchUpper = UBound(SearchArray)

    For i = iSearchLower To iSearchUpper
        DoEvents
        Source = Join(Filter(Split(Source, " "), SearchArray(i), Keep, _
            vbTextCompare), " ")
    Next i
    FilterArray = Source
End Function 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜