【问题标题】:Compare array entries比较数组条目
【发布时间】:2020-06-16 06:20:50
【问题描述】:

我需要比较数组条目。我有两个带有file1.csv 之类的字符串的数组。这些数组填充了几乎相同但未排序的字符串:

arrayA = {file1.csv, file2.csv, file3.csv ...}
arrayB = {file1.csv, file3.csv, fileABC.csv ...}

我的方法是遍历数组并比较类似的条目

For i = LBound(arrayA) To UBound(arrayA)
    For j = LBound(arrayB) To UBound(arrayB)
        If arrayA(j) <> arrayB(i) Then
            ' call func
            i = i + 1
        Else
            j = j + 1
        End If

这个想法很简单,取一个变量j 并保持第二个变量i。循环遍历两个列表,并且仅当缺少一个条目时,才调用一个函数。这是问题所在。我的情况不适用于未排序的列表。因为arrayA(2) 等于arrayB(1) 但它会在一次caparision 不相等后立即触发不相等 条件。但这必须首先遍历完整的数组,然后才能确定是否缺少条目。

【问题讨论】:

    标签: arrays excel vba string-comparison


    【解决方案1】:

    不确定是只循环遍历arrayA 还是遍历两者,但如果只是A 则尝试:

    Sub Test()
    
    Dim x As Long
    Dim arrayA As Variant: arrayA = Array("file1.csv", "file2.csv", "file3.csv")
    Dim arrayB As Variant: arrayB = Array("file1.csv", "file3.csv", "fileABC.csv")
    
    For x = LBound(arrayA) To UBound(arrayA)
        If IsError(Application.Match(arrayA(x), arrayB, 0)) Then
            Debug.Print arrayA(x) & " Not Found"
        End If
    Next
    
    End Sub
    

    如果你想同时循环,那么也许:

    Sub Test()
    
    Dim x As Long, y As Long, z As Long
    Dim arrayA As Variant: arrayA = Array("file1.csv", "file2.csv", "file3.csv")
    Dim arrayB As Variant: arrayB = Array("file1.csv", "file3.csv", "fileABC.csv")
    Dim arrayC As Variant: arrayC = Array(arrayA, arrayB)
    
    For x = 0 To 1
        y = ((x + 1) Mod 2)
        For z = LBound(arrayC(x)) To UBound(arrayC(x))
            If IsError(Application.Match(arrayC(x)(z), arrayC(y), 0)) Then
                Debug.Print arrayC(x)(z) & " Not Found"
            End If
        Next
    Next
    
    End Sub
    

    【讨论】:

    • 我只需要 arrayAarrayB 进行比较。所以第一个解决方案对我有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2020-12-14
    • 2020-06-03
    相关资源
    最近更新 更多