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 e foreach semplifica la manipolazione e la lettura dei dati in un array, rendendo il codice più chiaro e sicuro.