R6对LotusScript有一些改进和增强,自那之后,Notes对象的接口时有补充和更新,但语言本身没有变化。那些改进就包括增加诸如ArrayGetIndex、ArrayUnique的有用函数。但在编程实践中,还有一些对数组的操作LotusScript没有提供原生的函数,好在基本上都能自己编写。下面的函数中用到的常数都在lsconst.lss或lserr.lss里定义,在脚本前要附加
%INCLUDE"lsconst.lss"
%INCLUDE"lserr.lss"
判断数组是否包含某个元素。
%REM Checks if an array contains a value. The ArrayGetIndex function returns null if the value is not found. %END REM Public Function ArrayContains(source As Variant, value As Variant) As Boolean ‘the data type of source is not checked intentionally ArrayContains=Not IsNull(ArrayGetIndex(source,value)) End Function
LotusScript中的数组最多可以有八维(dimension),下面这个函数利用运行时错误(run-time error)ErrSubscriptOutOfRange获得维数。
‘Returns the number of an array‘s dimensions Function ArrayDimension(array As Variant) As Integer If Not IsArray(array) Then ArrayDimension=0 Exit Function End If On Error ErrSubscriptOutOfRange GoTo RESULT Dim d As Integer, lb As Integer For d=1 To 9 lb=LBound(array, d) Next RESULT: ArrayDimension=d-1 Exit Function End Function
返回多维数组的大小,即所有元素的个数。
Function ArraySize(array As Variant) As Integer If Not IsArray(array) Then ArraySize=0 Exit Function End If ArraySize=1 Dim d As Integer d=ArrayDimension(array) Dim i As Integer For i=1 To d ArraySize=ArraySize*(UBound(array, i)-LBound(array,i)+1) Next End Function
判断两个数组的“形状”,也就是维数和每一维的上下限是否相同。这个函数在今后比较数组是否相等时有用。
Function ArrayBoundsEquals(a1 As Variant, a2 As Variant) As Boolean If (Not IsArray(a1)) Or (Not IsArray(a2)) Then ArrayBoundsEquals=False Exit Function End If Dim d1 As Integer, d2 As Integer d1=ArrayDimension(a1) d2=ArrayDimension(a2) If d1<>d2 Then ArrayBoundsEquals=False Exit Function End If Dim d As Integer For d=1 To d1 If LBound(a1)><LBound(a2) Or UBound(a1)><UBound(a2) Then ArrayBoundsEquals=False Exit Function End If Next ArrayBoundsEquals=True End Function
将多维数组转换成一维数组。这个函数同样用于比较两个数组是否相等。
Function ArrayToOneDimension(array As Variant) As Variant If Not IsArray(array) Then Call SetValue(ArrayToOneDimension, array) Exit Function End If Dim d As Integer d=ArrayDimension(array) If d=1 Then ArrayToOneDimension=array Exit Function End If Dim size As Integer size=ArraySize(array) Dim result() As Variant ReDim result(size-1) Dim i As Integer ForAll e In array result(i)=e i=i+1 End ForAll ArrayToOneDimension=result End Function
时间: 2024-11-05 19:03:22