Вам необходимо 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})