Instrucción ReDim (Visual Basic)

Vuelve a asignar espacio de almacenamiento a una variable de matriz.

ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]

Partes

Término

Definición

Preserve

Opcional. Modificador utilizado para conservar los datos en la matriz existente cuando sólo se cambia el tamaño de la última dimensión.

name

Obligatorio. Nombre de la variable de matriz. Vea Nombres de elementos declarados (Visual Basic).

boundlist

Obligatorio. Lista de límites de cada dimensión de la matriz nuevamente definida.

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 dispone de una matriz grande y ya no necesita algunos de sus elementos, ReDim puede reducir el tamaño de la matriz para liberar memoria. Por otra parte, si el código determina que una matriz necesita más elementos, ReDim puede agregarlos.

La instrucción ReDim se ha diseñado únicamente para matrices. No es válida en escalares (variables que contienen un valor único), colecciones ni estructuras. Tenga en cuenta que si declara una variable de tipo Array, la instrucción ReDim no dispone de suficiente información de tipo para crear la nueva matriz.

Sólo puede utilizar ReDim en el nivel de clase en el nivel de procedimiento. Esto significa que el contexto de la declaración de una variable debe ser un procedimiento, y no un archivo de código fuente, un espacio de nombres, una interfaz, una clase, una estructura, un módulo ni un bloque. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados (Visual Basic).

Reglas

  • Modificadores. Puede especificar sólo el modificador Preserve y no puede omitir la palabra clave ReDim si lo hace.

  • Varias variables. Puede cambiar el tamaño de varias variables de matriz en la misma instrucción de declaración, especificando las partes name y boundlist de cada una. Las variables múltiples se separan con comas.

  • Límites de matrices. Cada entrada en boundlist puede especificar los límites inferior y superior de la dimensión. El límite inferior siempre es cero, tanto si se especifica como si no. El límite superior es el valor superior posible para ese subíndice, no la longitud de la dimensión (que es el límite superior más uno). Cada subíndice puede variar de cero a su valor de límite superior.

    El número de dimensiones en boundlist debe coincidir con el rango original de la matriz.

  • Matrices vacías. Es posible utilizar –1 para declarar el límite superior de una dimensión de matriz. Esto significa que la matriz está vacía pero no tiene el valor Nothing (Visual Basic). Para obtener más información, vea Matrices en Visual Basic. No obstante, el código de Visual Basic no permite un acceso correcto a dicha matriz. Si se intenta el acceso, se produce un error IndexOutOfRangeException durante la ejecución.

  • Tipos de datos. La instrucción ReDim no puede cambiar el tipo de datos de una variable de matriz ni de sus elementos.

  • Inicialización. La instrucción ReDim no puede proporcionar nuevos valores de inicialización para los elementos de matriz.

  • Rango. La instrucción ReDim no puede cambiar el rango (número de dimensiones) de la matriz.

  • Cambiar el tamaño con Preserve. Si se utiliza Preserve, sólo se puede cambiar el tamaño de la última dimensión de la matriz y, para el resto de las dimensiones, se debe especificar el mismo límite que tengan en la matriz existente.

    Por ejemplo, si su matriz tiene sólo una dimensión, puede cambiar el tamaño de dicha dimensión y conservar el contenido de la matriz, ya que es la última dimensión y la única. Sin embargo, si su matriz tiene dos o más dimensiones, sólo puede cambiar el tamaño de la última dimensión si utiliza Preserve.

  • Propiedades. Se puede utilizar ReDim en una propiedad que contiene una matriz de valores.

Behavior

  • Reemplazo de matriz. ReDim libera la matriz existente y crea una matriz nueva con el mismo rango. La nueva matriz reemplaza la matriz liberada en la variable de matriz.

  • Inicialización sin Preserve. Si no especifica Preserve, ReDim inicializa los elementos de la nueva matriz en el valor predeterminado para su tipo de datos.

  • Inicialización con Preserve. Si se especifica el modificador Preserve, Visual Basic copia los elementos de la matriz existente en la nueva matriz.

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 una pérdida parcial de datos. 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 primera instrucción ReDim crea una nueva matriz que reemplaza la matriz existente en la variable intArray. ReDim copia todos los objetos de la matriz existente en la nueva matriz. También agrega 10 columnas más al final de cada fila en todas las capas e inicializa los elementos de estas nuevas columnas con 0 (el valor predeterminado de Integer, el tipo de elemento de la matriz).

El segundo ReDim crea otra nueva matriz, copiando todos los elementos que quepan. Sin embargo, se pierden cinco columnas desde el final de cada fila en cada capa. Esto no es un problema si ha terminado de utilizar estas columnas. Si se reduce el tamaño de una matriz de gran tamaño, puede liberar memoria que ya no necesite.

El tercer ReDim crea otra matriz nueva, quitando otro cinco columnas del final de cada fila en cada capa. Esta vez no copia ningún elemento existente. Así se recupera el tamaño original de la matriz y se devuelven sus elementos al valor predeterminado original.

Vea también

Referencia

Instrucción Const (Visual Basic)

Instrucción Dim (Visual Basic)

Erase (Instrucción, Visual Basic)

Nothing (Visual Basic)

IndexOutOfRangeException

Conceptos

Matrices en Visual Basic