Come creare gli array in Visual Basic
Visual Basic mi permette di definire array con una o più dimensioni tramite l'istanza del tipo System.Array.
Come dichiarare un array
Per definire un array monodimensionale (vettore) utilizzo il comando Dim aggiungendo due parentesi tonde dopo il nome della variabile.
Dim nomearray() As tipo
Gli array sono variabili di riferimento, ossia contengono l'indirizzo di memoria dove si trova il dato e non il dato stesso.
Esempio
Dim anno() As Integer
Gli elementi dell'array devono essere sempre dello stesso tipo. Ad esempio, interi, stringhe, ecc.
Per definire in modo esplicito il numero degli elementi dell'array utilizzo l'istruzione ReDim dopo la dichiarazione.
ReDim nomearray(n)
Dove n è l'indice massimo dell'array.
Esempio
ReDim anno(2)
anno(0)=2000
anno(1)=2001
anno(2)=2002
anno(3)=2003
L'indice 3 non è ammesso perché l'indice massimo è 2. In questo caso VB solleva un'eccezione.
Esempio
Dim anno() As Integer
Redim anno(3)
Come assegnare i dati in un'array
Posso fare l'assegnazione dei valori al momento della dichiarazione, elencando i valori tra parentesi graffe, separati da una virgola.
Esempio
Dim anno() As Integer = {2000,2001,2002}
Se la type inference è attiva in Visual Basic, posso evitare di dichiarare il tipo.
Lo deduce implicitamente VB
Esempio
Dim nomearray() = New Integer() {2000,2001,2002}
In alternativa, posso registrare un dato in un singolo elemento usando il nome dell'array seguito da due parentesi tonde dove indico la posizione dell'elemento nell'indice.
nomearray(indice)=dato
Il primo elemento dell'array ha indice 0, il secondo ha indice 1, ecc.
Pertanto, l'ultimo elemento di un array composto da n elementi ha un indice pari a n-1.
Esempio
Questo array è composto da n=3 elementi.
anno(0)=2000
anno(1)=2001
anno(2)=2002
L'ultimo elemento occupa la posizione 2 nell'indice.
Come richiamare un elemento
Per richiamare il valore contenuto in un elemento dell'array, digito il nome dell'array seguito dalle parentesi tonde.
Tra le parentesi indico la posizione dell'elemento che voglio richiamare.
nomearray(indice)
Esempio
Per stampare sulla console il contenuto dell'elemento dell'array con indice 3 digito anno(3)
Console.Write(anno(3))
Come creare un array multidimensionale
Per definire un array a due dimensioni (matrice) devo indicare due indici anziché 1.
Dim nomearray(,) As tipo
In questo caso tra le parentesi tonde ho inserito una virgola. Vuol dire che l'array utilizza due indici (x,y).
Esempio
Dim nomearray(,) As Integer
Redim nomearray(3,3)
In questo caso ho creato una matrice 3x3 (tre righe e tre colonne).
Come funziona l'assegnazione negli array
L'assegnazione dei valori è analoga ai vettori monodimensionali.
Devo soltanto indicare due indici tra le parentesi tonde anziché uno.
Esempio
nomearray(0,0)=1
nomearray(0,1)=2
nomearray(0,2)=3
nomearray(1,0)=4
nomearray(1,1)=5
nomearray(1,2)=6
nomearray(2,0)=7
nomearray(2,1)=8
nomearray(2,2)=9
Come richiamare un elemento dell'array
Allo stesso modo, per richiamare il valore di un elemento devo indicare entrambi gli indici tra le parenti tonde.
Esempio
nomearray(2,2)
Un array a tre dimensioni
Per definire un array a tre dimensioni (tensore) indico tre indici.
Dim nomearray(,,) As tipo
In questo caso ci sono due virgole. Vuol dire che l'array ha tre indici (x,y,z).
Esempio
Dim nomearray(,,) As Integer
Redim nomearray(3,3,3)
In questo caso ho creato un tensore 3x3x3.
L'assegnazione e il richiamo dei valori è simile alla matrice, devo soltanto specificare tre indici anziché due.
Esempio
nomearray(0,0,0)=1
nomearray(0,0,1)=2
nomearray(0,0,2)=3
nomearray(0,0,0)=4
nomearray(0,1,1)=5
nomearray(0,2,2)=6
....
Gli array con un tipo di dato personalizzato
In Visual Basic posso creare array anche usando un tipo di dato personalizzato.
Esempio
Creo una classe chiamata Persone() con due campi (nome, voto) di tipo pubblico.
Public Class Persone
Public nome As String
Public voto As Integer
End Class
Poi definisco un array studenti che richiama la classe Persone come un tipo di dato personalizzato.
Uso l'istruzione With per inserire dei valori nell'array.
Dim studenti As Persone() =
{
New Persone With { .Nome="Tom Smith", .voto = 27 },
New Persone With { .Nome="Sam Red", .voto = 25 }
}
Infine richiamo e stampo un elemento dell'array.
Per farlo indico il nome dell'array (studenti) seguito dall'indice dell'elemento tra le parentesi tonde e, dopo un punto, dal campo a cui voglio accedere.
Ad esempio, voglio vedere il voto del secondo studente
Console.Write(studenti(1).voto)
L'output del programma è
25
Gli array con un tipo di dato anonimo
Per definire un array posso anche usare un tipo di dato anonimo senza richiamare una classe per definire i campi dell'array.
Esempio
Definisco un array studenti con la funzione Dim e inserisco i dati con le clausole New e With
Dim studenti =
{
New With { .Nome="Tom Smith", .voto = 27 },
New With { .Nome="Sam Red", .voto = 25 }
}
Dopo ogni With indico tra parentesi graffe i nomi dei campi e i valori da assegnare.
Il primo With definisce per inferenza il nome e il tipo di dato dei campi.
Il risultato è un array composto da due righe.
Nota. Negli inserimenti successivi al primo With devo rispettare sia l'ordine di presentazione dei campi che il tipo di dato di ogni campo.
Per aggiungere nuove righe all'array dopo l'inizializzazione, modifico la dimensione dell'array con l'istruzione Redim e la clausola Preserve.
Poi inserisco la nuova riga con un'assegnazione rispettando l'ordine e il tipo di dato dei campi.
ReDim Preserve studenti2(2)
studenti2(2) = New With {.nome = "John White", .voto = 30}
E così via.