1

vB.NETで配列内のインデックスに無制限のインデックス(limit)を設定する方法を知りたい通常、配列の各次元でアイテムの最大数を指定する必要がありますが、数がわからない場合(たとえば、 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"
4

2 に答える 2

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)
于 2013-02-19T21:12:23.030 に答える
1

他の回答が示唆しているように、これは推奨される解決策ではありませんが、質問に答えるためReDim Preserveに、必要に応じて最初のランクのサイズを増やすために使用できます。

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

storage(currentIndex, 3, 5) = "abcdefgh"
于 2013-02-23T02:13:21.650 に答える