Sì, si sta cercando il ReDim
dichiarazione, che alloca dinamicamente la quantità di spazio nella matrice.
la seguente dichiarazione
Dim MyArray()
dichiara un array senza dimensioni, in modo che il compilatore non sa quanto è grande e non è possibile memorizzare qualsiasi cosa all'interno di esso.
Ma è possibile utilizzare l'istruzione ReDim
per ridimensionare la matrice:
ReDim MyArray(0 To 3)
E se è necessario ridimensionare la matrice, mentre conservando il suo contenuto, è possibile utilizzare la parola chiave Preserve
insieme con l'affermazione ReDim
:
ReDim Preserve MyArray(0 To 3)
Ma notare che sia ReDim
e in particolare ReDim Preserve
hanno un costo delle prestazioni pesante. Cerca di evitare di fare questo più e più volte in un ciclo se possibile; i tuoi utenti ti ringrazieranno.
Tuttavia, nel semplice esempio mostrato nella tua domanda (se non è solo un campione usa e getta), non è necessario ReDim
affatto. Basta dichiarare la matrice con le dimensioni esplicite:
Dim MyArray(0 To 3)
fonte
2012-01-13 13:09:11
Perché dovresti farlo * in * il ciclo? 'ReDim', e specialmente quando aggiungi' Preserve', è un potenziale killer delle prestazioni. Sapete quante volte il ciclo andrà a scorrere, quindi fatelo sicuramente al di fuori del ciclo. Quindi stai ridimensionando l'array una sola volta e non hai bisogno di 'Preserve'. –
@CodyGray Hai perfettamente ragione se la dimensione finale dell'array è già definita all'entrata del ciclo. Mettere i Redim all'interno del ciclo sarebbe un killer delle prestazioni. Tuttavia, ho presupposto che la dimensione della matrice non sia determinata entrando nel ciclo. Altrimenti l'intero campione non ha alcun senso ... – Fluffi1974
L'asterisco * deve * essere definito al momento di entrare nel ciclo. Devi definire l'intervallo del ciclo. Anche se è una variabile piuttosto che una costante come '3', stai ancora specificando un limite superiore nell'istruzione' For'. Da usare per inizializzare dinamicamente la dimensione dell'array. –