将 2 个动态长度数组添加到第三个数组
Adding 2 Arrays of dynamic length to 3rd Array
我在将这两个数组相加时遇到问题。
我有 arr1 和 arr2 这个字符串元素。
arr1(0) = "000"
arr1(1) = "001"
arr1(2) = "002"
arr1(3) = "003"
arr1(4) = "004"
arr1(5) = "005"
arr2(0) = "Closed"
arr2(1) = "Open"
这些数组可以是动态大小和值。 (只是为了演示添加了静态值)
我想将这些项目值复制到 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
edit2:因为在 for 循环中调整数组大小让我遇到了性能问题,所以我进行了第二次尝试。这是我的最终解决方案(以防其他人感兴趣):
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
这是一个基于您的代码的快速尝试,它使用 Preserve
维护数组并动态构建元素。
Dim arr1(6)
Dim arr2(2)
Dim arr3()
Dim i
Dim y
arr1(0) = "000"
arr1(1) = "001"
arr1(2) = "002"
arr1(3) = "003"
arr1(4) = "004"
arr1(5) = "005"
arr2(0) = "Closed"
arr2(1) = "Open"
Dim item, x
For i = 0 To UBound(arr1) - 1
item = arr1(i)
For y = 0 To UBound(arr2) - 1
x = i + y + 1
ReDim Preserve arr3 (i + x)
arr3(i + x) = item & " " & arr2(y)
Next
Next
For i = 0 To UBound(arr3)
WScript.Echo arr3(i)
Next
输出:
000 Closed
000 Open
001 Closed
001 Open
002 Closed
002 Open
003 Closed
003 Open
004 Closed
004 Open
005 Closed
005 Open
我在将这两个数组相加时遇到问题。
我有 arr1 和 arr2 这个字符串元素。
arr1(0) = "000"
arr1(1) = "001"
arr1(2) = "002"
arr1(3) = "003"
arr1(4) = "004"
arr1(5) = "005"
arr2(0) = "Closed"
arr2(1) = "Open"
这些数组可以是动态大小和值。 (只是为了演示添加了静态值)
我想将这些项目值复制到 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
edit2:因为在 for 循环中调整数组大小让我遇到了性能问题,所以我进行了第二次尝试。这是我的最终解决方案(以防其他人感兴趣):
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
这是一个基于您的代码的快速尝试,它使用 Preserve
维护数组并动态构建元素。
Dim arr1(6)
Dim arr2(2)
Dim arr3()
Dim i
Dim y
arr1(0) = "000"
arr1(1) = "001"
arr1(2) = "002"
arr1(3) = "003"
arr1(4) = "004"
arr1(5) = "005"
arr2(0) = "Closed"
arr2(1) = "Open"
Dim item, x
For i = 0 To UBound(arr1) - 1
item = arr1(i)
For y = 0 To UBound(arr2) - 1
x = i + y + 1
ReDim Preserve arr3 (i + x)
arr3(i + x) = item & " " & arr2(y)
Next
Next
For i = 0 To UBound(arr3)
WScript.Echo arr3(i)
Next
输出:
000 Closed
000 Open
001 Closed
001 Open
002 Closed
002 Open
003 Closed
003 Open
004 Closed
004 Open
005 Closed
005 Open