Instrução ReDim (Visual Basic)

Realoca espaço de armazenamento para uma variável de matriz.

Sintaxe

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

Partes

Termo Definição
Preserve Opcional. Modificador usado para preservar os dados na matriz existente quando é alterado o tamanho apenas da última dimensão.
name Obrigatórios. Nome da variável da matriz. Confira Nomes de elementos declarados.
boundlist Obrigatórios. Lista de limites de cada dimensão da matriz redefinida.

Comentários

Você pode usar a instrução ReDim para alterar o tamanho de uma ou mais dimensões de uma matriz que já foi declarada. Se tiver uma matriz grande e não precisar mais de alguns de seus elementos, ReDim poderá liberar memória reduzindo o tamanho da matriz. Por outro lado, se sua matriz precisar de mais elementos, ReDim poderá adicioná-los.

A instrução ReDim destina-se apenas para matrizes. Não é válida em escalares (variáveis que contêm apenas um único valor), coleções ou estruturas. Observe que, se declarar uma variável como de tipo Array, a instrução ReDim não terá informações de tipo suficientes para criar a nova matriz.

Você só pode usar ReDim no nível do procedimento. Portanto, o contexto de declaração para a variável deve ser um procedimento; não pode ser um arquivo de origem, um namespace, uma interface, uma classe, uma estrutura, um módulo ou um bloco. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.

Regras

  • Múltiplas variáveis. Você pode redimensionar várias variáveis de matriz na mesma instrução de declaração e especificar as partes name e boundlist para cada variável. Múltiplas variáveis são separadas por vírgulas.

  • Limites da matriz. Cada entrada em boundlist pode especificar os limites inferior e superior dessa dimensão. O limite inferior é sempre 0 (zero). O limite superior é o valor de índice mais alto possível para a dimensão, não o comprimento da dimensão (que é o limite superior mais um). O índice para cada dimensão pode variar de 0 até seu valor de limite superior.

    O número de dimensões em boundlist deve corresponder ao número original de dimensões (classificação) da matriz.

  • Tipos de dados. A instrução ReDim não pode alterar o tipo de dados de uma variável de matriz ou seus elementos.

  • Inicialização. A instrução ReDim não pode fornecer novos valores de inicialização para os elementos da matriz.

  • Classificar. A instrução ReDim não pode alterar a classificação (o número de dimensões) da matriz.

  • Redimensionamento com Preserve. Se você usar Preserve, poderá redimensionar apenas a última dimensão da matriz. Para todas as outras dimensões, você deve especificar o limite da matriz existente.

    Por exemplo, se a matriz tiver apenas uma dimensão, você poderá redimensionar essa dimensão e ainda preservar todo o conteúdo da matriz, pois você está alterando a última e única dimensão. No entanto, se a matriz tiver duas ou mais dimensões, você poderá alterar o tamanho apenas da última dimensão se usar Preserve.

  • Propriedades. Você pode usar ReDim em uma propriedade que contém uma matriz de valores.

Comportamento

  • Substituição de matriz. ReDim libera a matriz existente e cria uma nova matriz com a mesma classificação. A nova matriz substitui a matriz liberada na variável de matriz.

  • Inicialização sem Preserve. Se você não especificar Preserve, ReDim inicializará os elementos da nova matriz usando o valor padrão para o tipo de dados.

  • Inicialização com Preserve. Se você especificar Preserve, o Visual Basic copiará os elementos da matriz existente para a nova matriz.

Exemplo

O exemplo a seguir aumenta o tamanho da última dimensão de uma matriz dinâmica sem perder dados existentes na matriz e, em seguida, diminui o tamanho com perda parcial de dados. Por fim, ele diminui o tamanho de volta para seu valor original e reinicializa todos os elementos da 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)

A instrução Dim cria uma nova matriz com três dimensões. Cada dimensão é declarada com um limite de 10, portanto, o índice de matriz para cada dimensão pode variar de 0 a 10. Na discussão a seguir, as três dimensões são conhecidas como camada, linha e coluna.

O primeiro ReDim cria uma nova matriz que substitui a matriz existente na variável intArray. ReDim copia todos os elementos da matriz existente para a nova matriz. Também adiciona mais 10 colunas ao final de cada linha em cada camada e inicializa os elementos nessas novas colunas com 0 (o valor padrão de Integer, que é o tipo de elemento da matriz).

O segundo ReDim cria outra nova matriz e copia todos os elementos que se ajustam. No entanto, cinco colunas são perdidas do final de cada linha em cada camada. Isso não será um problema se tiver terminado de usar essas colunas. Reduzir o tamanho de uma matriz grande pode liberar memória que não seja mais necessária.

O terceiro ReDim cria outra nova matriz e remove outras cinco colunas do final de cada linha em cada camada. Desta vez, ele não copia nenhum elemento existente. Essa instrução reverte a matriz para seu tamanho original. Como a instrução não inclui o modificador Preserve, ela define todos os elementos de matriz para seus valores padrão originais.

Para obter exemplos adicionais, consulte Matrizes.

Confira também