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