2012-05-14 7 views

Respuesta

8

Utilice ReDim with Preserve para aumentar el tamaño de la matriz conservando los valores anteriores.

ReDim in loop es aconsejable cuando no tiene idea del tamaño y llegó a saber para aumentar el tamaño de la matriz uno por uno.

Dim TeamIndex(), i As Integer 

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

Si usted declare el tamaño de la matriz en adelante en el código en el tiro a continuación, utilizar

ReDim TeamIndex(100) 

Así que el código será:

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

se puede utilizar el ArrayList/Lista (De T) para usar Agregar/Quitar los valores más dinámicamente.

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

No necesita ReDim and Preserve. Simplemente inicie la matriz con el tamaño 100 [suponiendo que el tamaño es 100] – Writwick

+0

'Para i = 0 a SomeNo'. Entonces, si el Array se Inicializará 'Como Nuevo Integer (SomeNo)', 'ReDim' y 'Preserve' no serán necesarios en este caso [Example byker] ya que 'SomeNo' es constante. En consecuencia, si 'SomeNo' también es variable y cambia constantemente, entonces' ReDim' y 'Preserve' serán necesarios. – Writwick

+1

+1 pero se debe preferir List (Of T) sobre ArrayList para código nuevo – MarkJ

2

No hay nada en la respuesta de Romil que considero estar equivocado, pero me gustaría ir más lejos. ReDim Preserve es un comando muy útil, pero es importante darse cuenta de que es un comando caro y usarlo con prudencia.

considerar:

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

Por cada bucle, excepto i = 0, el tiempo de ejecución de lenguaje común (CLR) debe:

  • espacio de descubrimiento para un nuevo array entero que es un elemento más grande que la matriz anterior
  • copiar los valores a través de la matriz anterior
  • inicializar el nuevo elemento
  • libera la matriz anterior para la recolección de basura.

ArrayList es fantástico si necesita agregar o eliminar elementos del centro de la matriz, pero está pagando por esa funcionalidad, incluso si no la necesita. Si, por ejemplo, está leyendo valores de un archivo y almacenándolos secuencialmente, pero no sabe de antemano cuántos valores habrá, ArrayList conlleva una sobrecarga considerable que puede evitar.

siempre uso ReDim así:

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 

Por encima de que he utilizado 100 y 1000. Los valores dependen de recojo mi evaluación del requisito probable.

Cuestiones relacionadas