从两个数组的差异创建第三个数组 [英] Create third array from difference of two arrays

查看:133
本文介绍了从两个数组的差异创建第三个数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从两个数组的差异创建第三个数组,我根本无法获得这个

I need to create third array from difference of two arrays, I simply can not get the logic of this

的逻辑正确的第三个数组 v3 将(从下面的代码) v3 =(Carol,Ted,Thor,Freya)

The correct third array v3 would be (from the code below) v3 = (Carol, Ted, Thor, Freya)

谢谢

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是否是子集无关紧要:

This one uses Collections and the fact that adding a duplicated key raises an error. It doesn't matter whether v1 or v2 is the subset:

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

这篇关于从两个数组的差异创建第三个数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆