我正在尝试将一个项目添加到数组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"
答案 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