2013-02-19 54 views
1

我想知道如何設置無限索引(限制)在vB.NET數組中的索引 我通常必須指定數組中每個維度的最大項目數,但當我不知道有多少人(比如說這是一個ID字段)時,我將不會浪費數據。VB.NET數組中的靈活索引

所以我想,而不是寫作

Dim storage(0 To 1000, 0 To 3, 0 To 5) As String 

寫這樣的事情(其中*表示無限制),把其他的限制分別爲它們分別是:

Dim storage(*, 0 To 3, 0 To 5) As String 

於是我可以添加像這樣的項目:

storage(123456,3,5) = "abcdefgh" 
+0

「無限指數(限制)「 - 你想能夠指定數組的上限嗎? – StingyJack 2013-02-19 21:11:05

+2

查看'List'對象而不是數組 - 您不必聲明它們的大小。 – 2013-02-19 21:12:11

+1

改爲有'Dictionary(Of String,String(,))'。 – GSerg 2013-02-19 21:12:55

回答

6

請不要這樣做:)動態地重新調整數組的大小爲n必要的是不必要的混淆。多維數組也是不必要的混淆。所以動態地重新調整多維數組的大小是不必要的折磨。當數組的大小是動態的時,不要使用數組。改爲使用Collection,例如List(Of T)類。而不是使用多個維度,作出這樣的規定,該名單包含對象的自定義類,例如:

Public Class Person 
    Public Property ID As String 
    Public Property PhoneNumbers As New List(Of PhoneNumber) 
End Class 

Public Class PhoneNumber 
    Public Property Number As String 
    Public Property Description As String 
End Class 

然後,你可以定義你的人的動態列表,像這樣:

Dim people As New List(Of Person) 

,你可以添加任意數量的電話號碼的一個人,像這樣的:

Dim person As New Person() 
Dim phone As New PhoneNumber() 
phone.Number = "123-123-1234" 
person.PhoneNumbers.Add(phone) 

Dim phone2 = New PhoneNumber() 
phone2.Number = "123-123-4567" 
person.PhoneNumbers.Add(phone2) 

而且你可以,同樣,添加多個成員,是這樣的:

Dim person2 As New Person() 
' ... 
people.Add(person) 

Dim person2 As New Person() 
' ... 
people.Add(person2) 
1

至於對方的回答表明,這不是首選的解決方案,但要回答你的問題,你可以使用ReDim Preserve提高排名第一的大小根據需要:

If UBound(storage, 1) < currentIndex Then 
    ReDim Preserve storage(currentIndex, 3, 5) 
End If 

storage(currentIndex, 3, 5) = "abcdefgh"