Iterare su un Array in C#
In questa lezione, presentiamo i metodi principali per iterare sugli elementi di un array in C#, con particolare attenzione ai cicli for
e foreach
.
Mettiamo in evidenza come ognuno di essi consenta un accesso ordinato e, quando necessario, una modifica dei valori memorizzati.
Iterazione sugli Elementi di un Array
Come abbiamo anticipato nella lezione precedente, l'iterazione sugli elementi di un array è una delle tecniche più utilizzate quando lavoriamo con gli array.
L'iterazione consecutiva utilizzando un ciclo ci consente di accedere a ogni elemento tramite il suo indice e ci permette di modificarlo come desideriamo.
Possiamo farlo con diversi costrutti di ciclo, ma il più appropriato è l'istruzione for
. Esamineremo in dettaglio il funzionamento di questo tipo di iterazione.
Iterazione con un Ciclo for
È una buona pratica utilizzare i cicli for
quando lavoriamo con array e strutture indicizzate.
Nell'esempio seguente, prendiamo in ingresso un array di numeri interi e ne raddoppieremo i valori di tutti gli elementi per poi stamparli:
int[] array = new int[] { 1, 2, 3, 4, 5 };
Console.Write("Output: ");
for (int index = 0; index < array.Length; index++)
{
// Raddoppiamo il numero
array[index] = 2 * array[index];
// Stampiamo il numero
Console.Write(array[index] + " ");
}
// Output: 2 4 6 8 10
Utilizzando un ciclo for
teniamo traccia dell'indice corrente dell'array e accediamo agli elementi secondo le necessità.
Non è obbligatorio iterare in modo consecutivo su tutti gli elementi: ciò significa che l'indice che utilizziamo nel ciclo for
può iterare sugli elementi in modo che l'algoritmo lo richieda.
Ad esempio, possiamo iterare soltanto su alcuni elementi dell'array, invece che su tutti:
int[] array = new int[] { 1, 2, 3, 4, 5 };
Console.Write("Output: ");
for (int index = 0; index < array.Length; index += 2)
{
array[index] = array[index] * array[index];
Console.Write(array[index] + " ");
}
// Output: 1 9 25
In questo esempio iteriamo su tutti gli elementi in posizione pari e ne calcoliamo il quadrato.
A volte vogliamo iterare sull'array in ordine inverso.
Possiamo farlo in modo simile, tranne per il fatto che il ciclo for
parte dall'indice dell'ultimo elemento e diminuisce a ogni iterazione finché il suo valore non raggiunge 0 (incluso). Ecco un esempio:
int[] array = new int[] { 1, 2, 3, 4, 5 };
Console.Write("Reversed: ");
for (int index = array.Length - 1; index >= 0; index--)
{
Console.Write(array[index] + " ");
}
// Reversed: 5 4 3 2 1
In questo esempio iteriamo sull'array in ordine inverso e stampiamo ogni elemento sulla console.
Iterazione con il Ciclo foreach
Uno dei costrutti più utilizzati per iterare sugli elementi di un array è foreach
. La sintassi del ciclo foreach
in C# è la seguente:
foreach (var item in collection)
{
// Elabora il valore qui
}
In questo costrutto, var
rappresenta il tipo degli elementi su cui stiamo iterando. La collection
è l'array (o qualsiasi altra raccolta di elementi) e item
è l'elemento corrente dell'array a ogni passo.
In generale, il costrutto del ciclo foreach
ha le stesse caratteristiche del ciclo for
. La differenza principale è che l'iterazione avviene sempre su tutti gli elementi: dall'inizio alla fine.
Non possiamo accedere all'indice corrente, ma iteriamo semplicemente sulla raccolta in base alla modalità definita dalla raccolta stessa. Approfondiremo questo concetto in futuro.
Per gli array, l'ordine di iterazione è consecutivo, dal primo all'ultimo elemento. La variabile del ciclo foreach
è in sola lettura, quindi non possiamo modificare il valore dell'elemento corrente dall'interno del ciclo.
L'istruzione foreach
viene utilizzata quando non abbiamo la necessità di cambiare gli elementi, ma soltanto di leggerli.
Esempio di Iterazione con foreach
Nel prossimo esempio vedremo come utilizzare il ciclo foreach
per iterare sull'array:
string[] capitali =
{ "Roma", "Parigi", "Londra", "Washington" };
foreach (string capitale in capitali)
{
Console.WriteLine(capitale);
}
Dopo aver dichiarato un array di stringhe capitali
, iteriamo sull'array utilizzando il ciclo foreach
e stampiamo gli elementi sulla console.
L'elemento corrente a ogni iterazione viene memorizzato nella variabile capitale
. Ecco il risultato ottenuto quando eseguiamo il codice:
Roma
Parigi
Londra
Washington
In Sintesi
Ricapitoliamo i concetti chiave affrontati in questa lezione:
- Utilizziamo il ciclo
for
per gestire l’indice e personalizzare le modalità di iterazione (per esempio, iterare su elementi in posizione pari o in ordine inverso). - Sfruttiamo il ciclo
foreach
per eseguire iterazioni complete sugli elementi di un array, quando non è necessario accedere all’indice o modificare i valori. - Ricordiamo che il ciclo
foreach
offre una variabile di sola lettura e non consente l’accesso diretto all’indice corrente. - Usare correttamente
for
eforeach
semplifica la manipolazione e la lettura dei dati in un array, rendendo il codice più chiaro e sicuro.