Introduzione agli Array in C#
Con questa lezione iniziamo lo studio di un'importante struttura dati in C#: gli array. Gli array sono una struttura dati fondamentale in programmazione e sono utilizzati per memorizzare una sequenza di elementi omogenei.
In questa lezione impareremo i primi concetti relativi agli array in C#, come la loro dichiarazione, creazione e inizializzazione.
Cos'è un Array?
Gli array sono una struttura dati vitale per qualsiasi linguaggio di programmazione. Un array può essere visto come una sequenza di dati omogenei ossia dello stesso tipo. Tali dati che compongono la sequenza prendono il nome di elementi.
Graficamente possiamo rappresentare un array in questo modo:
Ad ogni elemento di un array è associato un indice che ne identifica la posizione all'interno dell'array stesso. In C#, così come in molti linguaggi di programmazione, gli indici degli array partono da zero. Per cui, se abbiamo un array di 5 elementi, ad esempio, gli indici andranno da 0 a 4.
Il numero di elementi di un array è detto dimensione o anche lunghezza dell'array.
Come abbiamo detto, un array è composto di elementi omogenei, ossia dello stesso tipo. Questo significa che un array può contenere solo elementi dello stesso tipo, non importa se il tipo è primitivo o di riferimento. Ciò ci consente di rappresentare un gruppo di elementi simili come una sequenza ordinata e di lavorare su di essi trattandoli come un'unica entità.
Un array può avere più di una dimensione, ma i più adoperati in programmazione sono gli array monodimensionali, ossia a dimensione singola, e gli array bidimensionali, ossia a due dimensioni. Nel primo caso, si parla spesso di vettori per indicare array monodimensionali. Nel secondo caso, invece, si parla di matrici.
Array
Un'Array è una struttura dati che rappresenta una sequenza di elementi omogenei. Gli elementi di un array sono indicizzati a partire da zero e sono accessibili tramite un indice.
Dichiarazione di un Array
In C# gli array hanno una lunghezza fissa, che viene stabilita nel momento in cui vengono instanziai. Tale dimensione ne determina il numero totale di elementi. Una volta che questa dimensione è stata stabilita, non può essere modificata durante l'esecuzione del programma.
Per dichiarare un array in C#, dobbiamo adoperare la seguente sintassi:
int[] mioArray;
In questo esempio, la variabile mioArray
è il nome dell'array che è composto da elementi di tipo int
. Tuttavia, in questo momento, l'array non contiene alcun elemento. L'aggiunta delle parentesi quadre a destra del tipo indica che non si tratta di un unico intero int
, bensì di un array di interi.
Quando dichiariamo una variabile di tipo array, come fatto sopra, stiamo in effeti dichiarando un riferimento che, al momento, non ha un valore: punta a null
. Questo perché la memoria per contenere gli elementi dell'array non è stata ancora allocata.
Per comprendere meglio la situazione, basta osservare la figura che segue:
Come si può vedere, nello stack di esecuzione del programma abbiamo la variabile mioArray
, ma attualmente non punta a nessuna area di memoria nello heap.
Dichiarare un Array
In linguaggio C# per dichiarare un array si adopera la seguente sintassi:
tipo[] nomeArray;
Dove tipo
è il tipo degli elementi dell'array e nomeArray
è il nome dell'array.
Creazione di un Array
Per creare un array in C# dobbiamo adoperare l'operatore new
il cui scopo è proprio quello di allocare memoria.
Tornando all'esempio di sopra, per creare un array di 5 elementi di tipo int
, dobbiamo scrivere:
int[] mioArray = new int[5];
Così facendo, nell'area di memoria dinamica, ossia lo heap, verrà allocato spazio per 5 interi. La variabile mioArray
punterà a tale area di memoria. Tutti gli elementi verranno inizializzati a zero. Per cui, la situazione diventerà la seguente:
Come si può vedere, dopo aver allocato la memoria per contenere 5 int
, la variabile mioArray
punta a tale area di memoria. In C# gli elementi di un array sono sempre memorizzati nella memoria dinamica o Heap.
Il numero totale di elementi viene specificato, in fase di creazione, inserendo il numero tra le parentesi quadre. Tale numero, per ovvi motivi, non deve essere negativo. Una volta fissato, tale numero non può essere modificato.
Creazione di un Array
Per creare un array in C# si adopera la seguente sintassi:
tipo[] nomeArray = new tipo[dimensione];
Dove tipo
è il tipo degli elementi dell'array, nomeArray
è il nome dell'array e dimensione
è il numero totale di elementi dell'array.
Inizializzazione di un Array e Valori di Default
Prima di poter utilizzare gli elementi di un certo array, dobbiamo inizializzarli.
In molti linguaggi di programmazione, come il linguaggio C, gli elementi di un array non vengono inizializzati, ma è compito del programmatore farlo. In C#, invece, gli elementi di un array vengono inizializzati automaticamente con un valore di default.
Questo valore di default è tipicamente 0 per i tipi numerici, false
per i tipi booleani e null
per i tipi di riferimento.
Pertanto, nell'esempio di sopra, tutti gli elementi dell'array mioArray
saranno inizializzati a zero.
Possiamo, però, specificare esplicitamente i valori con cui inizializzare gli elementi di un array. Per fare ciò, possiamo adoperare la seguente sintassi:
int[] mioArray = { 1, 2, 3, 4, 5 };
In questo caso, l'array mioArray
conterrà i valori 1
, 2
, 3
, 4
e 5
. Abbiamo inserito i valori iniziali tra parentesi graffe {}
separati da virgole. Questo tipo di inizializzazione ha anche il vantaggio che non dobbiamo specificare la lunghezza dell'array in quanto essa viene determinata dal numero di elementi specificati.
La situazione in memoria sarà la seguente:
Dichiarazione e Inizializzazione di un Array
In C#, un array può essere inizializzato al momento della dichiarazione. Per farlo, si adopera la seguente sintassi:
tipo[] nomeArray = { valore1, valore2, ..., valoreN };
Dove tipo
è il tipo degli elementi dell'array, nomeArray
è il nome dell'array e valore1
, valore2
, ..., valoreN
sono i valori con cui inizializzare gli elementi dell'array.
Esempio
Vediamo un esempio di come dichiarare ed inizializzare un array in C#:
string[] mesi = {
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre"
};
In questo caso, abbiamo allocato un array di 12 elementi di tipo string
. Il tipo string
è un tipo riferimento, per cui gli elementi dell'array saranno inizializzati a null
. Tuttavia, abbiamo specificato esplicitamente i valori iniziali, che sono i nomi dei mesi dell'anno. Tali valori saranno allocati nella memoria dinamica.
Per cui, la disposizione in memoria dell'array mesi
sarà la seguente:
Come si può vedere, la variabile array mesi
si trova sullo stack del programma. Gli elementi dell'array, invece, sono allocati nello heap. Poichè tali elementi sono di tipo string
, essi contengono riferimenti a oggetti di tipo string
a loro volta allocati nello heap.
Limiti di un Array
Un dettaglio fondamentale da ricordare sempre quando si lavora in C# è che gli array, di default, sono zero-based, ossia sono indicizzati a partire da 0.
Pertanto il primo elemento avrà indice 0, il secondo avrà indice 1 e così via. L'ultimo elemento avrà indice pari alla lunghezza dell'array meno uno. Per cui, un array di N elementi avrà indici che vanno da 0 a N-1.
In C# gli Array sono Zero-Based
Gli array in C# sono indicizzati a partire da zero. Pertanto, il primo elemento di un array ha indice 0, il secondo ha indice 1 e così via. L'ultimo elemento ha indice pari alla lunghezza dell'array meno uno.
Un altro aspetto importante da considerare è che, una volta che un array è stato creato, la sua dimensione non può essere modificata. Questo significa che non possiamo aggiungere o rimuovere elementi da un array. Se abbiamo bisogno di una struttura dati che possa crescere o diminuire dinamicamente, dobbiamo adoperare altre strutture dati come le liste.
In Sintesi
In questa lezione abbiamo imparato che:
- Un array è una struttura dati che rappresenta una sequenza di elementi omogenei.
- Gli elementi di un array sono indicizzati a partire da zero.
- In C# gli array sono sempre allocati nello heap.
- Gli array in C# sono zero-based, ossia sono indicizzati a partire da zero.
- Una volta che un array è stato creato, la sua dimensione non può essere modificata.
Nella prossima lezione, vedremo come accedere agli elementi di un array e come modificarli.