2013-10-25 143 views
0

我試圖添加一個項目到數組2d。將項目添加到陣列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"} 

UPDATE:

嗯......否則嘗試它,我不噸得到它,代碼不起作用:

' 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

作爲ReDim文檔中指出: -

與保留調整大小。如果您使用保留,您只能調整數組的最後一個維的大小,並且對於其他每個維必須 指定它在現有數組中已具有的相同邊界。例如,如果您的數組只有一個維度,那麼可以調整該維度的大小並仍然保留該數組的所有內容,因爲 您正在更改最後一個維度。但是,如果您的數組 具有兩個或多個維度,則如果使用「保留」,則只能更改最後一個維度的大小。

所以要調整陣列中的多個維度,你需要像這樣: -

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 
+1

感謝您提供的信息,但問題沒有解決,我仍然不知道如何解決問題,請參閱我的更新,如果可以的話。 – ElektroStudios

+0

@ElektroStudios,你說得很對;我添加了一個可能的解決方案。 –

2

當你確定你需要一個比你更大的數組如果第一個維度發生變化,則需要定義新的數組而不是ReDim,然後複製所有內容。

Array(2,2) - > Array(2,4)'ReDim將爲此工作。
陣列(2,2) - >陣列(4,2)「創建一個新的數組,並複製內容

+0

thnaks但......我該怎麼辦......對不起,我需要更多的幫助?比創建一個新的數組和複製內容,因爲我不知道如何解決它,我試圖編寫一個通用函數來添加一個項目到二維數組,然後我需要自動化數組計算和這些東西。如果可以,請參閱我的更新。 – ElektroStudios