Loops 将2个动态长度数组添加到第3个数组

Loops 将2个动态长度数组添加到第3个数组,loops,vbscript,Loops,Vbscript,我在将这两个阵列添加到一起时遇到问题 我有arr1和arr2这两个字符串元素 arr1(0) = "000" arr1(1) = "001" arr1(2) = "002" arr1(3) = "003" arr1(4) = "004" arr1(5) = "005" 这些数组可以是动态大小和值。(刚刚添加了静态值以供演示) 我

我在将这两个阵列添加到一起时遇到问题

我有arr1和arr2这两个字符串元素

    arr1(0) = "000"
    arr1(1) = "001"
    arr1(2) = "002"
    arr1(3) = "003"
    arr1(4) = "004"
    arr1(5) = "005"
这些数组可以是动态大小和值。(刚刚添加了静态值以供演示)

我想将这些项目值复制到arr3。arr3的输出应如下所示:

arr3(0)  = "000 Closed"
arr3(1)  = "000 Open"
arr3(2)  = "001 Closed"
arr3(3)  = "001 Open"
arr3(4)  = "002 Closed"
arr3(6)  = "002 Open"
arr3(7)  = "003 Closed"
arr3(8)  = "003 Open"
arr3(9)  = "004 Closed"
arr3(10) = "004 Open"
arr3(11) = "005 Closed"
arr3(12) = "005 Open"
我试过这个:

   Dim arr1(6)
   Dim arr2(2)
   Dim arr3(0)
   Dim i
   Dim y
   
   arr1(0) = "This000"
   arr1(1) = "This001"
   arr1(2) = "This002"
   arr1(3) = "This003"
   arr1(4) = "This004"
   arr1(5) = "This005"
   
    arr2(0) = "Closed"
    arr2(1) = "Open"
   
   redim  arr3 ((UBound(arr1)) * (Ubound(arr2)))
   
        Console.WriteLine (Ubound (arr3))
    
   for i =  Lbound(arr1) to Ubound(arr1)
                      
               for y = Lbound(arr2) to Ubound(arr2)
                arr3(i*y+y)       = (arr1(i) & arr2(y))
             next
  next

 for i =  Lbound(arr3) to Ubound(arr3)
    Console.WriteLine (arr3(i))
 next `
但我不能让它正常工作。 也许你们能帮我?谢谢

编辑: 我现在有点工作了。但我想还有比这更优雅的解决方案:

Function GetParameters(ByRef arr1, ByRef arr2)
    Dim arr3()
    Dim i,j,k,l
    ReDim Preserve  arr3 ((UBound(arr1)+1) * (UBound(arr2)+1)-1)
    
    HMIRuntime.Trace (UBound (arr3)) &vbNewLine     
    
    
    l=0
    For  i=0 To UBound(arr3)
        If i > 0 Then
            i=i-1
        End If
        
        For j = 0 To UBound (arr2)
            
            For k = 0 To UBound(arr2)                  
                
                arr3(i) = arr1(l) & " " & arr2(k)                   
                
                        If i < UBound(arr3) Then
                            i=i+1
                        End If                 
                    Next
            If l < (UBound(arr1)) Then
                l=l+1               
            End If    
        Next
    Next
    GetParameters=arr3
End Function


下面是一个基于代码的快速尝试,它使用
Preserve
动态维护数组和构建元素

Dim arr1(6)
仪表盘2(2)
Dim arr3()
昏暗的我
暗淡的
arr1(0)=“000”
arr1(1)=“001”
arr1(2)=“002”
arr1(3)=“003”
arr1(4)=“004”
arr1(5)=“005”
arr2(0)=“已关闭”
arr2(1)=“打开”
暗项目,x
对于i=0到UBound(arr1)-1
项目=arr1(i)
对于y=0到UBound(arr2)-1
x=i+y+1
ReDim保留arr3(i+x)
arr3(i+x)=项目和arr2(y)
下一个
下一个
对于i=0至UBound(arr3)
WScript.Echo arr3(i)
下一个
输出:

000关闭
000开
001关闭
001打开
002关闭
002开
003关闭
003开
004关闭
004开放
005关闭
005开

数组中的实际元素数为
UBound(array)+1
。另外,对第三个数组使用另一个索引,从零开始,在循环中递增,无需使事情复杂化。@Flakes不同意这种方法,但重复使用像
i
这样的变量并没有错,只要它超出范围并已被重新分配,这正是
for i=
所做的。显然,如果他们试图将其用作
i
已经在范围内的内部循环,那将是不可能的。非常感谢用户692942您的回答对我有效!不知何故,我需要从您尝试的2 for循环中删除“-1”。但我想这是因为我现在处理的输入数组不同了。非常感谢!
Function GetParameters(ByRef arr1, ByRef arr2)
    Dim arr3()
    Dim i,j,k,l
    ReDim Preserve  arr3 ((UBound(arr1)+1) * (UBound(arr2)+1)-1)
    
    HMIRuntime.Trace (UBound (arr3)) &vbNewLine     
    
    
    l=0
    For  i=0 To UBound(arr3)
        If i > 0 Then
            i=i-1
        End If
        
        For j = 0 To UBound (arr2)
            
            For k = 0 To UBound(arr2)                  
                
                arr3(i) = arr1(l) & " " & arr2(k)                   
                
                        If i < UBound(arr3) Then
                            i=i+1
                        End If                 
                    Next
            If l < (UBound(arr1)) Then
                l=l+1               
            End If    
        Next
    Next
    GetParameters=arr3
End Function

Dim arr1()
Dim arr2()
Dim arr3()
Dim i,j,k,l,m,n
Dim maxArr1
Dim maxArr2
maxArr1 = 5 'change for dynamic Arr
maxArr2 = 10

j=0

for l = 0 to maxArr1 'TestArray1
  ReDim Preserve arr1(l)
    arr1(l) = Cstr(l)  
 
Next


   for m = 0 to maxArr2  'TestArray2
    ReDim Preserve arr2(m)
    arr2(m) ="Closed_"& Cstr(m) 
  
  Next

   ReDim Preserve arr3( (((Ubound(arr1)+1) * (Ubound(arr2)+1) )-1) ) 'New size for array 3

'Copy arr1 and arr2 in arr3 (according to pattern)
for i=0 to UBound(arr1)   
    for k=0 to Ubound(arr2)   
      arr3(j)=arr1(i)& " - "&arr2(k)
        j=j+1
     Next
Next

For n = 0 To UBound(arr3)
  WScript.Echo "arr3("&n&") = "&arr3(n)
Next