Gli array sono usati per memorizzare un set di valori dello stesso tipo, in una sola variabile.
Per dichiarare un array utilizziamo la sintassi:
Dim variabileArray As tipoDato()
Le parentesi tonde dopo il tipo di dato indicano che stiamo dichiarando un array.
All'atto della dichiarazione non abbiamo ancora allocato lo spazio di memoria necessario per memorizzare l'array, per farlo utilizziamo la parola chiave New, come nell'esempio
myArray = New Integer(10){}
L'operazione è detta allocazione. Il numero tra parentesi indica quanti elementi può contenere l'array, ovvero la sua dimensione. Le parentesi graffe sono la lista di inizializzazione dell'array, cioè i di base valori degli elementi, sono obbligatorie anche se non contengono valori.
Ecco un esempio di array inizializzato:
myArray = New Integer(10){1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Infine possiamo far riferimento ad un elemento dell'array indicandone l'indice tra parentesi tonde. Da notare che l'indice del primo elemento è 0., mentre l'elemento i-esimo ha comen indice (i-1)
Dim ilQuintoElemento As Integer
ilQuintoElemento = myArray(4)
Vediamo un esempio completo:
Module modArray
Sub Main()
Dim i, j As Integer
Dim numeroLanci As Integer = 56432
Dim myRandom As Random = New Random()
Dim arrDado As Integer() = New Integer() {0, 0, 0, 0, 0, 0}
For i = 1 To numeroLanci
j = myRandom.Next(0, arrDado.Length)
arrDado(j) += 1
Next
Console.WriteLine("Numero" & vbTab & "Uscito" & vbTab & "Percentuale")
For i = 1 To arrDado.Length
Console.WriteLine(i & vbTab & arrDado(i - 1) & vbTab & FormatNumber(arrDado(i - 1) / numeroLanci * 100, 2) & "%")
Next
End Sub
End Module
Gli array non hanno dei metodi per l'ordinamento, se è necessario lavorare con degli array ordinati, occorre implementare delle procedure apposta per lo scopo. In questo capitolo presenterò una procedura di ordinamento che in gergo informatico è detta Bubbole Sort, si chiama così perché facciamo in modo che i valori più piccoli (leggeri) salgano man mano in cime all'array, come delle bolle di sapone
Creiamo quindi un modulo BubbleSort che contiene le procedure per l'ordinamento.
Module modArray
Sub Main()
Dim i As Integer = 0
Dim arrayDaOrdinare As Integer() = New Integer() {10, 20, 340, 21, 5, 220, 43, 92, 249, 1000, 12}
BubbleSort.DoBubbleSort(arrayDaOrdinare)
For i = 0 To arrayDaOrdinare.GetUpperBound(0)
Console.WriteLine(arrayDaOrdinare(i))
Next
End Sub
End Module
Module BubbleSort
Sub DoBubbleSort(ByVal arrayDaOrdinare As Integer())
Dim i, j As Integer
For i = 0 To arrayDaOrdinare.GetUpperBound(0)
For j = 0 To arrayDaOrdinare.GetUpperBound(0) - 1
If arrayDaOrdinare(j) > arrayDaOrdinare(j + 1) Then
scambiaValori(arrayDaOrdinare, j)
End If
Next
Next
End Sub
Sub scambiaValori(ByVal arrayDaOrdinare As Integer(), ByVal primo As Integer)
Dim tmp As Integer = arrayDaOrdinare(primo)
arrayDaOrdinare(primo) = arrayDaOrdinare(primo + 1)
arrayDaOrdinare(primo + 1) = tmp
End Sub
End Module
Nell'esempio possiamo notare l'utilizzo del metodo GetUpperBound(i) che restituisce il limite superiore della dimensione i-esima dell'array.
In VB.Net abbiamo due tipi di array multidimensionali: rettangolari ed irregolari. Quelli rettangolari sona array in cui tutte le righe hanno la stessa dimensione.
Vediamo come si definiscono
Dim matrice As Integer(,) = New Integer(2, 4){}
Ed ecco un esempio in cui dichiariamo una matrice con degli elementi e poi utilizziamo due cicli For per stamparne gli elementi.
Module modArray
Sub Main()
Dim i, j As Integer
Dim matrice As Integer(,) = New Integer(1, 3) {{1, 2, 4, 5}, {2, 4, 5, 6}}
For i = 0 To matrice.GetUpperBound(0)
For j = 0 To matrice.GetUpperBound(1)
Console.WriteLine("Elemento ({0}, {1}) = {2}", i, j, matrice(i, j))
Next
Next
End Sub
End Module
Possiamo utilizzare la struttura For Each.. Next per iterare i valor di una collection
La sintassi è la seguente
For Each variabile In Oggetto
istruzioni
Next
Vediamo un esempio in cui stampiamo l’elemento più grande di un array
Module modArray
Sub Main()
Dim massimo As Integer = 0
Dim valore As Integer
Dim myArray As Integer() = New Integer() {2, 4, 5, 6, 43, 432, 3, 94, 2}
For Each valore In myArray
If valore > massimo Then
massimo = valore
End If
Next
Console.WriteLine("Il valore più grande è: " & massimo)
End Sub
End Module