从两个数组的差异创建第三个数组 [英] Create third array from difference of two arrays
本文介绍了从两个数组的差异创建第三个数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要从两个数组的差异创建第三个数组,我根本无法获得这个
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屋!
查看全文