Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lotus notes Lotusscript:使用变量作为数组名,这样就可以在循环中应用函数_Lotus Notes_Lotusscript - Fatal编程技术网

Lotus notes Lotusscript:使用变量作为数组名,这样就可以在循环中应用函数

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

我不确定这个问题的措辞是否恰当。这就是我想要实现的目标

我的代理构建了一系列大约25个数组。Arr1()和Arr(2)等。它们是动态的,因为我不知道它们将包含多少项

代理必须对每个数组应用多个函数。一个简单的是气泡排序

我有25行这样的代码:

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