根据两个数组的差异创建第三个数组

2023-12-02

我需要根据两个数组的差异创建第三个数组,我根本无法理解这个逻辑

正确的第三个数组v3将是(来自下面的代码)v3 = (Carol, Ted, Thor, Freya)

Thanks

Sub MatchArrays()
Dim v1, v2, v3
Dim i As Long, j As Long

v1 = Array("Bob", "Carol", "Ted", "Alice", "Thor", "Freya")
v2 = Array("Bob", "Carol")

ReDim v3(LBound(v1) To Abs(UBound(v1) - UBound(v2)))

For i = LBound(v1) To UBound(v1)
   For j = LBound(v2) To UBound(v2)
     If InStr(1, v1(i), v2(j)) Then
       v3(i) = v1(i)
       Exit For
     End If
   Next j
  MsgBox v3(i)
Next i
End Sub

这个使用了集合,并且添加重复的键会引发错误。 v1 或 v2 是否是子集并不重要:

Sub test()
Dim v1 As Variant, v2 As Variant, v3 As Variant
Dim coll As Collection
Dim i As Long

'Assumes 0-based Variants
v1 = Array("Bob", "Carol", "Ted", "Alice", "Thor", "Freya")
v2 = Array("Bob", "Carol")
ReDim v3(LBound(v1) To Abs(UBound(v2) - UBound(v1)) - 1)

Set coll = New Collection
For i = LBound(v1) To UBound(v1)
    coll.Add v1(i), v1(i)
Next i
For i = LBound(v2) To UBound(v2)
    On Error Resume Next
    coll.Add v2(i), v2(i)
    If Err.Number <> 0 Then
        coll.Remove v2(i)
    End If
    On Error GoTo 0
Next i
For i = LBound(v3) To UBound(v3)
    v3(i) = coll(i + 1) 'Collections are 1-based
    Debug.Print v3(i)
Next i
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据两个数组的差异创建第三个数组 的相关文章

随机推荐