VB.NET中数组中的灵活指数

时间:2013-02-19 21:06:27

标签: arrays vb.net

我想知道如何在vB.NET中为数组中的索引设置无限索引(限制) 我通常必须指定数组每个维度中的最大项目数,但是当我不知道有多少(比如说它是一个ID字段)时,我会在那里,我不想浪费数据。

所以我想要而不是写

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"

2 个答案:

答案 0 :(得分:6)

请不要这样做:)根据需要动态调整数组大小是不必要的混淆。多维数组也不必要地混淆。因此,动态地重新调整多维数组的大小是不必要的折磨。

当数组的大小是动态的时,请不要使用数组。请使用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 :(得分:1)

正如另一个答案所示,这不是首选解决方案,但要回答您的问题,您可以根据需要使用ReDim Preserve来增加第一个等级的大小:

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

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