我很难找到在VB中将1d数组添加到2d数组的方法。例如:
Dim arr(,) As Integer
arr = { {0, 1}, {2, 3}, {4, 5} }
arr{3} = {6, 7}
'Now arr should be = { {0, 1}, {2, 3}, {4, 5}, {6, 7} }
请注意,上面的代码只是我想要实现的演示,无法正常工作。
我一直在尝试在论坛上建议的事情,例如:
我尝试过的所有方法,但它们似乎都不起作用。最终,我正在寻找一个子程序,该子程序可以附加一个未知长度的二维数组,例如:
Dim arr(,) As Integer
append(arr, {0, 1})
append(arr, {2, 3})
'Now arr should be = {{0, 1}, {2, 3}}
答案 0 :(得分:0)
您需要Redim Preserve
数组,但是您不能这样做,因为它在您需要另一行时会添加另一列。因此,您将必须定义一个新数组并复制数据:
Public Sub Append2DRow(ByRef arr(,) As Integer, new_row(,) As Integer)
Dim new_arr(,) As Integer
ReDim new_arr(0 To UBound(arr, 1) + 1, 0 To 1)
Array.Copy(arr, new_arr, arr.LongLength)
new_arr(UBound(new_arr, 1), 0) = new_row(0, 0)
new_arr(UBound(new_arr, 1), 1) = new_row(0, 1)
arr = new_arr
End Sub
Public Sub Append1DRow(ByRef arr(,) As Integer, new_row() As Integer)
Dim new_arr(,) As Integer
ReDim new_arr(0 To UBound(arr, 1) + 1, 0 To 1)
Array.Copy(arr, new_arr, arr.LongLength)
new_arr(UBound(new_arr, 1), 0) = new_row(0)
new_arr(UBound(new_arr, 1), 1) = new_row(1)
arr = new_arr
End Sub
Dim arr(,) As Integer
arr = {{0, 1}, {2, 3}, {4, 5}}
Append2DRow(arr, {{6, 7}})
Append1DRow(arr, {6, 7})
您可以通过迫使自己进入一个包含两行且列数可变的数组来避免此问题,但是您将无法轻松地对其进行初始化,并且通常可能更难于使用它:
Public Sub Append2DRow(ByRef arr(,) As Integer, new_row(,) As Integer)
ReDim Preserve arr(0 To 1, 0 To UBound(arr, 2) + 1)
arr(0, UBound(arr, 2)) = new_row(0, 0)
arr(1, UBound(arr, 2)) = new_row(0, 1)
End Sub
Public Sub Append1DRow(ByRef arr(,) As Integer, new_row() As Integer)
ReDim Preserve arr(0 To 1, 0 To UBound(arr, 2) + 1)
arr(0, UBound(arr, 2)) = new_row(0)
arr(1, UBound(arr, 2)) = new_row(1)
End Sub
Dim arr(0 To 1, 0 To 2) As Integer
arr(0, 0) = 0 : arr(1, 0) = 1
arr(0, 1) = 2 : arr(1, 1) = 3
arr(0, 2) = 4 : arr(1, 2) = 5
Append2DRow(arr, {{6, 7}})
Append1DRow(arr, {6, 7})
但是,开始时不应使用数组。您应该使用列表:
Dim list = New List(Of Integer()) From {
New Integer() {0, 1},
New Integer() {2, 3},
New Integer() {4, 5}
}
list.Add({6, 7})