2013-02-19 87 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"