• 86. LotusScript中的数组函数


    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





  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7294599.html
Copyright © 2020-2023  润新知