0

我正在尝试将项目添加到 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"
4

2 回答 2

2

当您确定需要比现有更大的数组时,如果第一个维度发生变化,您将需要定义一个新数组而不是重新调整现有数组,然后复制所有内容。

Array(2,2) -> Array(2,4) 'ReDim 将为此工作。
Array(2,2) -> Array(4,2) '创建一个新数组并复制内容

于 2013-10-25T10:16:26.780 回答
2

ReDim文档中所述:-

使用 Preserve 调整大小。如果您使用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
于 2013-10-25T10:39:19.073 回答