Instrucción ReDim (Visual Basic)
Reasigna espacio de almacenamiento a una variable de matriz.
Sintaxis
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Partes
Término | Definición |
---|---|
Preserve |
Opcional. Modificador usado para mantener los datos en la matriz existente cuando cambia el tamaño solamente de la última dimensión. |
name |
Necesario. Nombre de la variable de matriz. Vea Declared Element Names. |
boundlist |
Necesario. Lista de límites de cada dimensión de la matriz redefinida. |
Comentarios
Puede utilizar la instrucción ReDim
para cambiar el tamaño de una o más dimensiones de una matriz que ya se ha declarado. Si tiene una matriz grande y ya no necesita algunos de sus elementos, ReDim
puede liberar memoria al reducir el tamaño de la matriz. Por otro lado, si la matriz necesita más elementos, ReDim
puede agregarlos.
La instrucción ReDim
está destinada solo a las matrices. No es válida en escalares (variables que contienen un único valor), colecciones ni estructuras. Tenga en cuenta que, si declara una variable de tipo Array
, la instrucción ReDim
no tiene suficiente información de tipo para crear la nueva matriz.
Solo puede usar ReDim
en el nivel de procedimiento. Por lo tanto, el contexto de declaración de la variable debe ser un procedimiento; no puede ser un archivo de código fuente, un espacio de nombres, una interfaz, una clase, una estructura, un módulo o un bloque. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).
Reglas
Varias variables. Puede cambiar el tamaño de varias variables de matriz en la misma instrucción de declaración, y especificar las partes
name
yboundlist
para cada variable. Las variables se separan con comas.Límites de matrices. Cada entrada de
boundlist
puede especificar los límites inferior y superior de esa dimensión. El límite inferior es siempre 0 (cero). El límite superior es el valor de índice posible más alto para esa dimensión, no la longitud de la dimensión (que es el límite superior más uno). El índice de cada dimensión puede variar entre 0 y el valor del límite superior.El número de dimensiones de
boundlist
debe coincidir con el número de dimensiones (rango) de la matriz original.Tipos de datos. La instrucción
ReDim
no puede cambiar el tipo de datos de una variable de matriz o de sus elementos.Inicialización. La instrucción
ReDim
no puede proporcionar nuevos valores de inicialización para los elementos de la matriz.Rango. La instrucción
ReDim
no puede cambiar el rango (el número de dimensiones) de la matriz.Cambiar el tamaño con Preserve. Si usa
Preserve
, puede cambiar el tamaño únicamente de la última dimensión de la matriz. Para cualquier otra dimensión, debe especificar el límite de la matriz existente.Por ejemplo, si su matriz tiene solo una dimensión, puede cambiar el tamaño de esa dimensión y conservar todo el contenido de la matriz, ya que es la última y única dimensión. Sin embargo, si su matriz tiene dos o más dimensiones, puede cambiar solamente el tamaño de la última dimensión si utiliza
Preserve
.Propiedades. Puede usar
ReDim
en una propiedad que contiene una matriz de valores.
Comportamiento
Reemplazo de matriz.
ReDim
libera la matriz existente y crea una matriz con el mismo rango. La nueva matriz reemplaza la matriz liberada en la variable de matriz.Inicialización sin Preserve. Si no se especifica
Preserve
,ReDim
inicializa los elementos de la nueva matriz mediante el valor predeterminado para su tipo de datos.Inicialización con Preserve. Si se especifica
Preserve
, Visual Basic copia los elementos de la matriz existente en la nueva.
Ejemplo
El ejemplo siguiente aumenta el tamaño de la última dimensión de una matriz dinámica sin perder los datos existentes en la matriz y, a continuación, reduce el tamaño con pérdida de datos parcial. Por último, reduce el tamaño a su valor original y reinicializa todos los elementos de la matriz.
Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)
La instrucción Dim
crea una nueva matriz con tres dimensiones. Cada dimensión se declara con un límite de 10, por lo que el índice de matriz para cada dimensión puede oscilar entre 0 y 10. En el siguiente análisis, las tres dimensiones se conocen como capa, fila y columna.
El primer ReDim
crea una nueva matriz que reemplaza la matriz existente en la variable intArray
. ReDim
copia todos los elementos de la matriz existente en la nueva matriz. También agrega 10 columnas más al final de cada fila en cada capa e inicializa los elementos de estas nuevas columnas a 0 (el valor predeterminado de Integer
, que es el tipo de elemento de la matriz).
El segundo ReDim
crea otra nueva matriz y copia todos los elementos que quepan. Sin embargo, se pierden cinco columnas del final de cada fila en cada capa. No es un problema si ya ha terminado de utilizar estas columnas. Reducir el tamaño de una matriz grande puede liberar memoria que ya no necesite.
El tercer ReDim
crea otra nueva matriz y quita otras cinco columnas del final de cada fila en cada capa. Esta vez no copia los elementos existentes. Esta instrucción revierte la matriz a su tamaño original. Dado que la instrucción no incluye el modificador Preserve
, establece todos los elementos de matriz con sus valores predeterminados originales.
Para obtener más ejemplos, vea Matrices.