Istruzione ReDim (Visual Basic)
Rialloca lo spazio di archiviazione per una variabile di matrice.
Sintassi
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Parti
Termine | Definizione |
---|---|
Preserve |
Facoltativo. Modificatore utilizzato per conservare i dati nella matrice esistente quando si modifica soltanto la grandezza dell'ultima dimensione. |
name |
Obbligatorio. Nome della variabile di matrice. Vedere Declared Element Names. |
boundlist |
Obbligatorio. Elenco di limiti relativi a ogni dimensione della matrice ridefinita. |
Osservazioni:
È possibile utilizzare l'istruzione ReDim
per modificare una o più dimensioni di una matrice che è stata già dichiarata. Se si dispone di una matrice di grandi dimensioni e alcuni degli elementi di questa non sono più necessari, ReDim
consente di liberare memoria riducendo le dimensioni della matrice. D’altra parte, se la matrice necessita di più elementi, ReDim
è in grado di aggiungerli.
L'istruzione ReDim
è destinata solo alle matrici. Non è valida per valori scalari (variabili che contengono un unico valore), raccolte o strutture. Tenere presente che se l'utente dichiara che una variabile è di tipo Array
, l'istruzione ReDim
non dispone di sufficienti informazioni sulla tipologia e non può creare la nuova matrice.
Si può usare ReDim
solo a livello di routine. Pertanto, il contesto della dichiarazione relativo alla variabile deve essere una routine. Di conseguenza, non può essere un file di origine, uno spazio dei nomi, un'interfaccia, una classe, una struttura, un modulo o un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.
Regole
Variabili multiple. È possibile ridimensionare numerose variabili di matrice nella stessa istruzione di dichiarazione e specificare i componenti
name
eboundlist
per ogni variabile. Nel caso di più variabili, è possibile separarle mediante virgole.Limiti di matrice. Ogni voce in
boundlist
è in grado di specificare i limiti inferiori e superiori di tale dimensione. Il limite inferiore è sempre pari a 0 (zero). Il limite superiore rappresenta il valore di indice più alto possibile per la dimensione, non la lunghezza della dimensione (vale a dire, il limite superiore più uno). L'indice di ogni dimensione può variare tra 0 e il relativo valore di limite superiore.Il numero di dimensioni in
boundlist
deve corrispondere al numero originale di dimensioni (livello) della matrice.Tipi di dati. L'istruzione
ReDim
non è in grado di modificare il tipo di dati di una variabile di matrice oppure i relativi elementi.Inizializzazione. L'istruzione
ReDim
non può fornire nuovi valori di inizializzazione per gli elementi della matrice.Classificazione. L'istruzione
ReDim
non può modificare la classificazione (numero di dimensioni) della matrice.Ridimensionamento con Preserve. Se si utilizza
Preserve
, è possibile ridimensionare solo l'ultima dimensione della matrice. Per ogni dimensione, è necessario specificare il limite della matrice esistente.Ad esempio, se la matrice contiene solo una dimensione, è possibile ridimensionarla e mantenere tutto il contenuto della matrice, poiché si sta modificando l'ultima e unica dimensione. Tuttavia, se la matrice dispone di due o più dimensioni e si utilizza
Preserve
, è possibile modificare i valori soltanto per l'ultima dimensione.Proprietà. È possibile utilizzare
ReDim
su una proprietà che contiene una matrice di valori.
Comportamento
Sostituzione della matrice.
ReDim
rilascia la matrice esistente e crea una nuova matrice con la stessa classificazione. La nuova matrice sostituisce quella rilasciata nella variabile di matrice.Inizializzazione senza Preserve. Se non si specifica
Preserve
,ReDim
inizializza gli elementi della nuova matrice utilizzando il valore predefinito per i loro tipi di dati.Inizializzazione con Preserve. Se si specifica
Preserve
, Visual Basic copia gli elementi dalla matrice esistente in quella nuova.
Esempio
Nell'esempio seguente viene aumentata la grandezza dell'ultima dimensione di una matrice dinamica senza perdere i dati presenti nella matrice; in seguito, viene ridotta la dimensione con perdita di dati parziali. Infine, viene ridotta la dimensione del relativo valore originale e vengono inizializzati di nuovo tutti gli elementi della matrice.
Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)
L'istruzione Dim
crea una nuova matrice con tre dimensioni. Ogni dimensione viene dichiarata con un limite pari a 10. In questo modo l'indice della matrice per ogni dimensione può essere compreso tra 0 e 10. Nella seguente discussione, si fa riferimento alle tre dimensioni come livello, riga e colonna.
La prima ReDim
crea una nuova matrice che sostituisce quella esistente nella intArray
di variabile. ReDim
copia tutti gli elementi dalla matrice esistente in quella nuova. Inoltre, consente di aggiungere altre 10 colonne alla fine di ogni riga di tutti i livelli e consente di inizializzare gli elementi in queste nuove colonne su 0 (valore predefinito) di Integer
, ovvero il tipo di elemento della matrice.
La seconda ReDim
crea una nuova matrice e copia tutti gli elementi adeguati. Tuttavia, cinque colonne vengono perse alla fine di ogni riga relativa a ogni livello. Ciò non rappresenta un problema se l'utente non ha più la necessità di utilizzare tali colonne. La riduzione delle dimensioni di una grande matrice può liberare memoria che non è più necessaria.
La terza ReDim
crea una nuova matrice e rimuove altre cinque colonne dalla fine di ogni riga relativa a ogni livello. Questa volta non copia gli elementi esistenti. Questa istruzione consente di ripristinare le dimensioni originali della matrice. Dal momento che l'istruzione non include il modificatore Preserve
, imposta i valori predefiniti originali di tutti gli elementi della matrice.
Per altri esempi, vedere Matrici.