Ancora qualche precisazione sull'utilizzo degli array in VB6.
Nel post precedente abbiamo visto come era possibile impostare gli indici inferiori e superiori di un array e come fosse possibile recuperarne le informazioni attraverso le funzioni Lbound e Ubound.
Proseguiamo con altre precisazioni.
Atrraverso l'istruzione ReDim è possibile riallocare lo spazio di memorizzazione per un array dinamico, ma solo se questo è stato dichiarato senza dimensioni.
Es.
Dim myArray() As Integer
ReDim myArray(0 To 9)
L'istruzione ReDim Preserve permette di riallocare lo spazio mantenendo gli eventuali valori già assegnati.
Es.
Dim myArray() As Integer
ReDim myArray(0 To 1)
myArray(0) = 10
myArray(1) = 20
ReDim Preserve myArray(0 To 2)
myArray(2) = 30
Debug.Print myArray(0), myArray(1), myArray(2) '
' Verrà stampato
10 20 30
E' possibile creare array multidimensionale semplicemente separando le varie dimensioni con la virgola.
Es.
Dim myArray() As Integer
ReDim myArray(0 To 1, 0 To 1)
myArray(0, 0) = 10
myArray(0, 1) = 11
myArray(1, 0) = 20
myArray(1, 1) = 21
myArray(2, 0) = 30
myArray(2, 1) = 31
In questo caso, però, sarà possibile utilizzare la funzione ReDim Preserve solo per ridimensionale l'ultima dimensione dell'array e non sarà possibile variare il numero di dimensioni.
Es.
Dim myArray() As Integer
ReDim myArray(0 To 1, 0 To 1)
ReDim Preserve myArray(0 To 1, 0 To 2) ' Non genera errore
ReDim Preserve myArray(0 To 2, 0 To 1) ' Genera errore - Subscript out of range
ReDim Preserve myArray(1 to 1, 0 to 1) ' Genera errore - Subscript out of range
Le funzioni Lbound e Ubound sono ancora utilizzabili e ci permetteranno di recuperare l'indice inferiore o superiore di ogni singola dimensione dell'array, specificando, dopo il riferimento all'array, la dimensione interessata.
Es.
Dim myArray() As Integer
Redim myArray(1 to 2, 0 to 4)
' Indice inferiore della prima dimensione (1)
Debug.Print(LBound(myArray, 1))
' Indice superiore della seconda dimensione (4)
Debug.Print(UBound(myArray, 2))