7,765
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Public Sub main()
Dim A(), B(), AtoB(), BtoA()
A = Array("a1", "a2", "a", "b", "c", "d", "f")
B = Array("a", "b", "c", "d", "e")
CompareArrs A(), B(), AtoB()
CompareArrs A(), B(), BtoA(), False
End Sub
Public Function CompareArrs(Arra(), Arrb(), ArrResult(), Optional Direction As Boolean = True) As Boolean
Dim Dic1, Dic2, i, j
Set Dic1 = CreateObject("scripting.dictionary") 'A数组的字典形式
Set Dic2 = CreateObject("scripting.dictionary") 'A数组和B数组的交集的字典形式
For i = LBound(Arra) To UBound(Arra)
Dic1(Arra(i)) = ""
Next i
For i = LBound(Arrb) To UBound(Arrb)
If Dic1.Exists(Arrb(i)) Then
Dic2(Arrb(i)) = ""
End If
Next i
j = 0
Erase ArrResult
If Direction Then '正向比较,即数组A中有且数组B中没有的元素
For i = LBound(Arra) To UBound(Arra)
If Not Dic2.Exists(Arra(i)) Then
ReDim Preserve ArrResult(j)
ArrResult(j) = Arra(i)
j = j + 1
End If
Next i
Else '负向比较,即数组B中有且数组A中没有的元素
For i = LBound(Arrb) To UBound(Arrb)
If Not Dic2.Exists(Arrb(i)) Then
ReDim Preserve ArrResult(j)
ArrResult(j) = Arrb(i)
j = j + 1
End If
Next i
End If
If j = 0 Then
CompareArrs = False '表示ArrResult数组中没有匹配的元素
Else
CompareArrs = True '表示ArrResult数组中有匹配的元素
End If
Set Dic1 = Nothing
Set Dic2 = Nothing
End Function
Option Explicit
Public Sub main()
Dim A(), B(), AtoB(), BtoA()
A = Array("a1", "a2", "a", "b", "c", "d", "f")
B = Array("a", "b", "c", "d", "e")
CompareArrs A(), B(), AtoB()
CompareArrs A(), B(), BtoA(), False
End Sub
Public Function CompareArrs(Arra(), Arrb(), ArrResult(), Optional Direction As Boolean = True) As Boolean
Dim Dic1, Dic2, Dic3, i, j, Arr() As Variant
Set Dic1 = CreateObject("scripting.dictionary") 'A数组的字典形式
Set Dic2 = CreateObject("scripting.dictionary") 'A数组和B数组的交集的字典形式
For i = LBound(Arra) To UBound(Arra)
Dic1(Arra(i)) = ""
Next i
For i = LBound(Arrb) To UBound(Arrb)
If Dic1.Exists(Arrb(i)) Then
Dic2(Arrb(i)) = ""
End If
Next i
j = 0
Erase ArrResult
If Direction Then '正向比较,即数组A中有且数组B中没有的元素
For i = LBound(Arra) To UBound(Arra)
If Not Dic2.Exists(Arra(i)) Then
ReDim Preserve ArrResult(j)
ArrResult(j) = Arra(i)
j = j + 1
End If
Next i
Else '负向比较,即数组B中有且数组A中没有的元素
For i = LBound(Arrb) To UBound(Arrb)
If Not Dic2.Exists(Arrb(i)) Then
ReDim Preserve ArrResult(j)
ArrResult(j) = Arrb(i)
j = j + 1
End If
Next i
End If
If j = 0 Then
CompareArrs = False '表示ArrResult数组中没有匹配的元素
Else
CompareArrs = True '表示ArrResult数组中有匹配的元素
End If
Set Dic1 = Nothing
Set Dic2 = Nothing
Set Dic3 = Nothing
End Function