比较数组条目
Compare array entries
我需要比较数组条目。我有两个数组,其中包含 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)
但它在一次变体不相等后立即触发 不等于 条件。但这必须首先遍历完整的数组,然后才能确定是否缺少条目。
不确定你是想只遍历 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
我需要比较数组条目。我有两个数组,其中包含 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)
但它在一次变体不相等后立即触发 不等于 条件。但这必须首先遍历完整的数组,然后才能确定是否缺少条目。
不确定你是想只遍历 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