2012-05-14 15 views

答えて

8

ReDimをPreserveで使用すると、古い値を保持して配列のサイズを増やすことができます。

サイズを知らず、Arrayサイズを1つずつ増やすことを知ったときには、ReDim inループを使用することをお勧めします。

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

あなたはArrayListの/リストを使用することができます

Dim TeamIndex(), i As Integer 

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

あなたがショットの後のコード内で配列のサイズを宣言する場合は、だから、コードがなります

ReDim TeamIndex(100) 

を使用(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 

List(Of T) MSDN

List(Of T) DotNetperls

+0

ReDimとPreserveは必要ありません。サイズ100の配列を初期化する。 – Writwick

+0

For i = 0〜SomeNo'。したがって、配列が '新しい整数(SomeNo)として初期化される場合'、 'ReDim'および' Preserve'はこのケースでは必要ありません。[Asker by Example] 'SomeNo'は定数です。したがって、 'SomeNo'も可変であり、常に変更されていれば' ReDim'と 'Preserve'が必要になります! – Writwick

+1

+1しかし、List(Of T)は新しいコードのArrayListよりも優先されるべきです – MarkJ

2

私が間違っていると考えるが、私はさらに行くだろうROMILの答えでは何もありません。 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の値を使用している上。

関連する問題