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.
No necesita ReDim and Preserve. Simplemente inicie la matriz con el tamaño 100 [suponiendo que el tamaño es 100] – Writwick
'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 pero se debe preferir List (Of T) sobre ArrayList para código nuevo – MarkJ