将项添加到Array 2D

时间:2013-10-25 09:46:19

标签: .net arrays vb.net syntax multidimensional-array

我正在尝试将一个项目添加到数组2d。

但是这会引发一个异常,例如:Redim only can change the dimension which is more to the right

' Create Array 2D

Dim MyArray As String(,) = _
{{"Item 0,0", "Item 0,1"}, {"Item 1,0", "Item 1,1"}, {"Item 2,0", "Item 2,1"}}


' Add Item

ReDim Preserve MyArray(MyArray.GetUpperBound(0)+1, MyArray.GetUpperBound(1)+1)
MyArray(MyArray.GetUpperBound(0), MyArray.GetUpperBound(1) - 1) = "Item 3,0"
MyArray(MyArray.GetUpperBound(0), MyArray.GetUpperBound(1)) = "Item 3,1"

我做错了什么?

另外......我可以像这样同时设置两个维度吗?:

ReDim Preserve MyArray(MyArray.GetUpperBound(0)+1, MyArray.GetUpperBound(1)+1)
MyArray(lastitem) = {"Item 3,0", "Item 3,1"}
  

更新:

嗯...尝试不然,我不明白,代码不起作用:

' Add Item

Dim MyArray2(MyArray.GetUpperBound(0) + 1, MyArray.GetUpperBound(1) + 1)(,) As String
MyArray.CopyTo(MyArray2, 0)
MyArray2(MyArray2.GetUpperBound(0), MyArray2.GetUpperBound(1) - 1) = "Item 3,0"
MyArray2(MyArray2.GetUpperBound(0), MyArray2.GetUpperBound(1)) = "Item 3,1"

2 个答案:

答案 0 :(得分:2)

当您确定需要比现有阵列更大的阵列时,如果第一个维度发生更改,则需要定义一个新阵列,而不是重新定义现有阵列,然后复制所有内容。

阵列(2,2) - >数组(2,4)'ReDim将适用于此。
阵列(2,2) - >数组(4,2)'创建一个新数组并复制内容

答案 1 :(得分:2)

ReDim文档中所述: -

  

使用Preserve调整大小。如果您使用保留,则只能调整大小   数组的最后一个维度,以及每个其他维度   指定现有数组中已有的绑定。

     

例如,如果您的数组只有一个维度,则可以调整其大小   维度仍然保留数组的所有内容,因为   您正在更改最后一个维度。但是,如果你的阵列   有两个或多个维度,你可以改变最后一个的大小   如果您使用Preserve,则为维度。

所以要在多个维度调整数组大小,你需要这样的东西: -

Dim second_array(my_array.GetUpperBound(0) + 1, my_array.GetUpperBound(1) + 1) As String

For i As Integer = 0 To my_array.GetUpperBound(0)
    For j As Integer = 0 To my_array.GetUpperBound(1)
        second_array(i,j) = my_array(i,j)
    Next j
Next i

my_array = second_array