6

新しい値を追加したい動的整数配列があります。どうすればいいですか?

Dim TeamIndex(), i As Integer

For i = 0 to 100
    'TeamIndex(i).Add = <some value>
Next
4

2 に答える 2

9

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

リスト(Tの)MSDN

List(Of T)DotNetperls

于 2012-05-14T07:32:53.920 に答える
2

ロミルの答えには、私が間違っていると思うものは何もありませんが、さらに先に進みます。 ReDim Preserveは非常に便利なコマンドですが、高価なコマンドであることを認識し、賢く使用することが重要です。

検討:

Dim TeamIndex(), i As Integer
For i = 0 to 100
  ReDim Preserve TeamIndex(i)
  TeamIndex(i) = <some value>
Next

i=0 を除くすべてのループで、共通言語ランタイム (CLR) は次のことを行う必要があります。

  • 前の配列よりも 1 要素大きい新しい整数配列のスペースを見つける
  • 前の配列から値をコピーします
  • 新しい要素を初期化する
  • ガベージ コレクションのために以前の配列を解放します。

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 を使用しました。選択する値は、要件の可能性の評価によって異なります。

于 2012-05-14T09:24:09.110 に答える