如何在VB中将2d数组附加到1d数组?

时间:2018-11-20 11:37:35

标签: arrays vb.net multidimensional-array append

我很难找到在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} }

请注意,上面的代码只是我想要实现的演示,无法正常工作。

我一直在尝试在论坛上建议的事情,例如:

  1. ReDim保护区
  2. Array.Resize
  3. 进行2d循环,将每个元素复制到新变量并添加新元素,然后将其重新映射回arr

我尝试过的所有方法,但它们似乎都不起作用。最终,我正在寻找一个子程序,该子程序可以附加一个未知长度的二维数组,例如:

Dim arr(,) As Integer
append(arr, {0, 1})
append(arr, {2, 3})
'Now arr should be = {{0, 1}, {2, 3}}

1 个答案:

答案 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})
相关问题