Matrices dinámicas
A veces necesitará saber exactamente lo grande que debe ser una matriz. Puede que desee poder cambiar el tamaño de la matriz en tiempo de ejecución.
Una matriz dinámica se puede cambiar de tamaño en cualquier momento. Las matrices dinámicas son una de las características más flexibles y cómodas de Visual Basic, y le ayudan a administrar de forma eficiente la memoria. Por ejemplo, puede usar una matriz grande durante un tiempo corto y liberar memoria del sistema cuando no necesite volver a usar la matriz.
La alternativa consiste en declarar la matriz con el mayor tamaño posible y pasar por alto los elementos de la matriz que no necesite. Sin embargo, esta solución, si se utiliza demasiado, puede hacer que el sistema operativo funcione con muy poca memoria.
Para crear una matriz dinámica
- Declare la matriz con la instrucción
Código [Seleccionar]
Dim MatrizDyn()
Asigne el número real de elementos con la instrucción ReDim.
Código [Seleccionar]
ReDim MatrizDyn(X + 1)
[/list]La instrucción ReDim puede aparecer sola en un procedimiento. A diferencia de las instrucciones Dim y Static, ReDim es una instrucción ejecutable; hace que la aplicación realice una acción en tiempo de ejecución.
La instrucción ReDim acepta la misma sintaxis que se utiliza en las matrices fijas. Cada ReDim puede cambiar el número de elementos, así como los límites inferior y superior de cada dimensión. Sin embargo, no se puede cambiar el número de dimensiones de la matriz.
Código [Seleccionar]
ReDim MatrizDyn(4 to 12)
Por ejemplo, la matriz dinámica Matriz1 se crea declarándola primero a nivel de módulo:
Código [Seleccionar]
Dim Matriz1() As Integer
Luego, un procedimiento asigna el espacio de la matriz:
Código [Seleccionar]
Sub CalcValoresAhora ()
.
.
.
ReDim Matriz1(19, 29)
End Sub
La instrucción ReDim mostrada aquí asigna una matriz de 20 por 30 enteros (con un tamaño total de 600 elementos). Como alternativa, se pueden establecer los límites de una matriz dinámica mediante variables:
Código [Seleccionar]
ReDim Matriz1(X, Y)
Nota Puede asignar cadenas a matrices redimensionables de bytes. Una matriz de bytes también se puede asignar a una cadena de longitud fija. Tenga cuidado en que el número de bytes de una cadena es diferente según las plataformas. En plataformas Unicode la misma cadena contiene el doble de bytes que los que contiene una plataforma no Unicode.
Preservar el contenido de las matrices dinámicas
Cada vez que ejecute la instrucción ReDim perderá todos los valores almacenados en ese momento en la matriz. Visual Basic restablece los valores al valor Empty (en matrices Variant), a cero (en matrices numéricas), a una cadena de longitud cero (en matrices de cadenas) o a Nothing (en matrices de objetos).
Esto resulta muy útil cuando desee preparar la matriz para contener datos nuevos o cuando desee reducir el tamaño de la matriz para que ocupe menos memoria. Puede que a veces desee cambiar el tamaño de la matriz sin perder los datos de la misma. Para ello puede usar ReDim con la palabra clave Preserve. Por ejemplo, puede ampliar una matriz en un elemento sin perder los valores de los elementos existentes mediante la función UBound para hacer referencia al límite superior:
Código [Seleccionar]
ReDim Preserve MatrizDyn(UBound(MatrizDyn) + 1)
Sólo se puede cambiar el límite superior de la última dimensión de una matriz multidimensional cuando se utiliza la palabra clave Preserve; si cambia alguna otra dimensión o el límite inferior de la última dimensión, se producirá un error en tiempo de ejecución. Así pues, puede usar un código como el siguiente:
Código [Seleccionar]
ReDim Preserve Matriz(10, UBound(Matriz, 2) + 1)
Pero no puede usar este código:
Código [Seleccionar]
ReDim Preserve Matriz(UBound(Matriz, 1) + 1, 10)
|