Сравнить записи массива - PullRequest
0 голосов
/ 16 июня 2020

Мне нужно сравнить записи массива. У меня есть два массива со строками типа file1.csv. Эти массивы заполнены почти такими же, но несортированными строками:

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

Мой подход заключался в l oop через массивы и сравнении записей вроде

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. L oop через оба списка и только если одна запись отсутствует, вызвать функцию. Вот в чем проблема. Мое условие не работает для несортированных списков. Потому что arrayA(2) равно arrayB(1), но срабатывает условие неравно сразу после того, как одно значение не равно. Но сначала необходимо go просмотреть весь массив и только потом решить, пропала ли запись.

1 Ответ

0 голосов
/ 16 июня 2020

Не уверен, хотите ли вы l oop только через 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

Если вы хотите l oop оба, тогда возможно:

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
...