Lotus notes Lotusscript:使用变量作为数组名,这样就可以在循环中应用函数
我不确定这个问题的措辞是否恰当。这就是我想要实现的目标 我的代理构建了一系列大约25个数组。Arr1()和Arr(2)等。它们是动态的,因为我不知道它们将包含多少项 代理必须对每个数组应用多个函数。一个简单的是气泡排序 我有25行这样的代码:Lotus notes Lotusscript:使用变量作为数组名,这样就可以在循环中应用函数,lotus-notes,lotusscript,Lotus Notes,Lotusscript,我不确定这个问题的措辞是否恰当。这就是我想要实现的目标 我的代理构建了一系列大约25个数组。Arr1()和Arr(2)等。它们是动态的,因为我不知道它们将包含多少项 代理必须对每个数组应用多个函数。一个简单的是气泡排序 我有25行这样的代码: Call bub_sort(Arr1) Call bub_sort(Arr2) etc. Set myArray = New MyArrayClass(arr1,arr2) Call myArray.bubbleSort %REM Descripti
Call bub_sort(Arr1)
Call bub_sort(Arr2)
etc.
Set myArray = New MyArrayClass(arr1,arr2)
Call myArray.bubbleSort
%REM
Description: NOT TESTET! JUST FOR DEMONSTRATION!
%END REM
Public Class ArrayHandler
Private ArrayList() As Variant
Private ArrayListCounter As Long
%REM
Sub New
Description: Constructor
%END REM
Public sub New(firstArray As Variant)
ArrayListCounter = 0
ReDim Preserve ArrayList(ArrayListCounter) As Variant
ArrayList(ArrayListCounter) = firstArray
End Sub
%REM
Sub addArray
Description: self Explaining... ;)
%END REM
Public Sub addArray(nexArray As Variant)
ArrayListCounter = ArrayListCounter + 1
ReDim Preserve ArrayList(ArrayListCounter) As Variant
ArrayList(ArrayListCounter) = nexArray
End Sub
%REM
Sub bub_sort_allArrays
Description: The Magic Function! ;-)
%END REM
Public Sub bub_sort_allArrays()
ForAll arrs In ArrayList
Call bub_sort(arrs)
End ForAll
End Sub
%REM
Sub bub_sort
Description: YOUR FUNCTION!
%END REM
Public Sub bub_sort(Arr As Variant)
'//-- YOUR CODE GOES HERE
End Sub
End Class
对于每个函数,我有25行这样的代码(或类似的代码)
随着时间的推移,我将添加额外的数组和可能不同的函数
似乎最好加载一个数组名列表或数组,然后对函数进行迭代,如下所示
'Sort Arrays
ForAll lst In lstGrpNme
Call bub_sort(lst)
End Forall
但是,当我传递字符串而不是数组时,代码当然不起作用
我怎样才能避开这件事
我担心我将不得不创建一个类?您可以创建一个包含所有数组的
变体
数组,并使用对所有
进行迭代:
Dim Array1(10)作为字符串
阵列1(0)=“一”
...
Dim Array2(10)作为字符串
阵列2(0)=“两个”
...
作为变体的Dim Allarray(25)
所有阵列(0)=阵列1
所有阵列(1)=阵列2
...
所有阵列中的Forall阵列
如果不是Isempty(数组),则
如果Ubound(数组)>0,则
打印(数组(0))'打印每个数组的第一个元素
调用基本单元排序(数组)
如果结束
如果结束
端孔
如果确定AllArray的每个元素都已填充并且每个数组至少有一个元素,则可以省略两行If
您也可以以类似的方式使用列表来代替数组。只需更改这条暗淡的线:
Dim allarray列表作为变量
而不是数字0,1,2。。。您可以给数组命名,然后使用该名称访问它们
Const数组_ONE=0
常量数组_TWO=1
所有阵列(阵列1)=阵列1
所有阵列(阵列二)=阵列二
...
Dim TmpArray作为变体
TmpArray=所有阵列(一个阵列)
TmpArray(0)=“xxx”
所有阵列(一个阵列)=TmpArray
您可以创建一个包含所有数组的变体
数组,并使用for all
遍历所有数组:
Dim Array1(10)作为字符串
阵列1(0)=“一”
...
Dim Array2(10)作为字符串
阵列2(0)=“两个”
...
作为变体的Dim Allarray(25)
所有阵列(0)=阵列1
所有阵列(1)=阵列2
...
所有阵列中的Forall阵列
如果不是Isempty(数组),则
如果Ubound(数组)>0,则
打印(数组(0))'打印每个数组的第一个元素
调用基本单元排序(数组)
如果结束
如果结束
端孔
如果确定AllArray的每个元素都已填充并且每个数组至少有一个元素,则可以省略两行If
您也可以以类似的方式使用列表来代替数组。只需更改这条暗淡的线:
Dim allarray列表作为变量
而不是数字0,1,2。。。您可以给数组命名,然后使用该名称访问它们
Const数组_ONE=0
常量数组_TWO=1
所有阵列(阵列1)=阵列1
所有阵列(阵列二)=阵列二
...
Dim TmpArray作为变体
TmpArray=所有阵列(一个阵列)
TmpArray(0)=“xxx”
所有阵列(一个阵列)=TmpArray
如果您确实希望将字符串作为数组名传递,则可以使用语句。为此,必须将所有数组变量放入代理的(声明)
部分。下面是一个例子:
`声明
Dim tempArray作为变体“这是用于执行操作的临时阵列
Dim array0作为变体
Dim array1作为变体
'... 等等
子初始化
'...
Dim arrayNames()作为字符串
Redim数组0(2)为整数
Redim阵列1(1)为整数
阵列0(0)=0
阵列0(1)=1
阵列0(2)=2
阵列1(0)=3
阵列1(1)=4
以字符串形式重拨arrayNames(1)
arrayNames(0)=“array0”
arrayNames(1)=“array1”
'对所有数组执行某些操作
在arrayNames中查找所有arrayName
调用GetArray(arrayName)
调用DoSomethingWithArray(tempArray)
调用SetArray(arrayName)
端孔
'...
端接头
'将数组放入临时数组
子GetArray(arrayName作为字符串)
执行“tempArray=”&arrayName$
端接头
'将临时数组放到数组中
子集合数组(arrayName作为字符串)
执行arrayName$&“=tempArray”
端接头
“一些功能
Sub-DoSomethingWithArray(阵列作为变体)
对于索引%=0到Ubound(数组)
数组(索引%)=数组(索引%)+1
下一个
端接头
如果您确实希望将字符串作为数组名传递,则可以使用语句。为此,必须将所有数组变量放入代理的(声明)
部分。下面是一个例子:
`声明
Dim tempArray作为变体“这是用于执行操作的临时阵列
Dim array0作为变体
Dim array1作为变体
'... 等等
子初始化
'...
Dim arrayNames()作为字符串
Redim数组0(2)为整数
Redim阵列1(1)为整数
阵列0(0)=0
阵列0(1)=1
阵列0(2)=2
阵列1(0)=3
阵列1(1)=4
以字符串形式重拨arrayNames(1)
arrayNames(0)=“array0”
arrayNames(1)=“array1”
'对所有数组执行某些操作
在arrayNames中查找所有arrayName
调用GetArray(arrayName)
调用DoSomethingWithArray(tempArray)
调用SetArray(arrayName)
端孔
'...
端接头
'将数组放入临时数组
子GetArray(arrayName作为字符串)
执行“tempArray=”&arrayName$
端接头
'将临时数组放到数组中
子集合数组(arrayName作为字符串)
执行arrayName$&“=tempArray”
端接头
“一些功能
Sub-DoSomethingWithArray(阵列作为变体)
对于索引%=0到Ubound(数组)
数组(索引%)=数组(索引%)+1
下一个
端接头
这是一个典型的例子,说明类何时会非常有用
我担心我将不得不去上课
别害怕,上课其实很容易。不久前,我写了两篇关于这一点的博客文章,如果您愿意,请看一看:
既然你瘦了
Public Class ArrayHandler
Private ArrayList List As Variant
%REM
Sub New
Description: Constructor
%END REM
Public sub New(firstArray As Variant, firstArrayName As String)
ArrayList(firstArrayName) = firstArray
End Sub
%REM
Sub addArray
Description: self Explaining... ;)
%END REM
Public Sub addArray(nexArray As Variant, nextArrayName As String)
ArrayList(nextArrayName) = nexArray
End Sub
%REM
Sub bub_sort_allArrays
Description: The Magic Function! ;-)
%END REM
Public Sub bub_sort_allArrays()
ForAll arrs In ArrayList
Call bub_sort(ListTag(arrs))
End ForAll
End Sub
%REM
Sub bub_sort
Description: YOUR FUNCTION!
%END REM
Public Sub bub_sort(Arr As Variant)
'//-- YOUR CODE GOES HERE
End Sub