LotusScript 两个数组中的公共元素

LotusScript Common elements in two Arrays

我有两个数组,它们没有排序并且长度可能不同,我想创建一个只包含公共元素的新数组。我需要一个像 LotusScript 中的 newArray = commonElements(Array1, Array2)。

四处寻找是否有代码示例,但找不到。已经能够创建它,但是循环比我认为应该需要的要多得多。

你能告诉我一个解决方案吗?

这个函数returns两个数组的共同元素:

Function commonElements(array1 As Variant, array2 As Variant) As Variant
    Dim newArray() As Variant 
    Dim i As Integer 
    i=0 
    ForAll v In array1
        If ArrayGetIndex(array2, v, 0) >= 0 Then
            ReDim Preserve newArray(i) 
            newArray(i) = v 
            i = i + 1
        End If
    End ForAll 
    commonElements = newArray 
End Function

这适用于字符串数组,我没有用数字测试:

FullTrim(ArrayReplace(src1, ArrayReplace(src1, src2, Null), Null))

我使用了 Knut 的解决方案,但需要它能够比较两个未知长度的数组。所以修改ForAll必须循环两个数组中较长的那个:

Function commonElements(array1 As Variant, array2 As Variant) As Variant
    Dim newArray() As Variant 
    Dim bigArray As Variant
    Dim smallArray As Variant
    If (UBound(Array1) => UBound(Array2)) Then
        bigArray = array1
        smallArray = array2
    Else
        bigArray = array2
        smallarray = array1
    End If
    Dim i As Integer 
    i=0 
    ForAll v In bigArray
        If ArrayGetIndex(smallArray, v, 0) >= 0 Then
            ReDim Preserve newArray(i) 
            newArray(i) = v 
            i = i + 1
        End If
    End ForAll 
    commonElements = newArray 
End Function