新しい値を追加したい動的整数配列があります。どうすればいいですか?
Dim TeamIndex(), i As Integer
For i = 0 to 100
'TeamIndex(i).Add = <some value>
Next
ReDim with Preserveを使用して、古い値を保持しながら配列のサイズを増やします。
サイズがわからず、アレイのサイズを1つずつ増やすことがわかった場合は、ReDiminloopをお勧めします。
Dim TeamIndex(), i As Integer
For i = 0 to 100
ReDim Preserve TeamIndex(i)
TeamIndex(i) = <some value>
Next
後でショットのコードで配列のサイズを宣言する場合は、
ReDim TeamIndex(100)
したがって、コードは次のようになります。
Dim TeamIndex(), i As Integer
ReDim TeamIndex(100)
For i = 0 to 100
TeamIndex(i) = <some value>
Next
ArrayList / List(Of T)を使用して、値の追加/削除をより動的に使用できます。
Sub Main()
' Create an ArrayList and add three strings to it.
Dim list As New ArrayList
list.Add("Dot")
list.Add("Net")
list.Add("Perls")
' Remove a string.
list.RemoveAt(1)
' Insert a string.
list.Insert(0, "Carrot")
' Remove a range.
list.RemoveRange(0, 2)
' Display.
Dim str As String
For Each str In list
Console.WriteLine(str)
Next
End Sub
ロミルの答えには、私が間違っていると思うものは何もありませんが、さらに先に進みます。 ReDim Preserve
は非常に便利なコマンドですが、高価なコマンドであることを認識し、賢く使用することが重要です。
検討:
Dim TeamIndex(), i As Integer
For i = 0 to 100
ReDim Preserve TeamIndex(i)
TeamIndex(i) = <some value>
Next
i=0 を除くすべてのループで、共通言語ランタイム (CLR) は次のことを行う必要があります。
ArrayList
配列の途中で要素を追加または削除する必要がある場合は素晴らしいですが、必要がなくてもその機能にお金を払っています。たとえば、ファイルから値を読み取り、それらを順番に保存しているが、値がいくつになるかを事前に知らない場合、ArrayList
回避できる大きなオーバーヘッドが発生します。
私はいつもReDim
このように使用します:
Dim MyArray() As XXX
Dim InxMACrntMax As Integer
ReDim MyArray(1000)
InxMACrntMax=-1
Do While more data to add to MyArray
InxMACrntMax = InxMACrntMax + 1
If InxMACrntMax > UBound(MyArray) Then
ReDim Preserve MyArray(UBound(MyArray)+100)
End If
MyArray(InxMACrntMax) = NewValue
Loop
ReDim MyArray(InxMACrntMax) ' Discard excess elements
上記では、100 と 1000 を使用しました。選択する値は、要件の可能性の評価によって異なります。