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
我有两个数组,它们没有排序并且长度可能不同,我想创建一个只包含公共元素的新数组。我需要一个像 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