Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Cosa Sono le Liste? | Strutture Dati e Gestione dei File
C# Oltre le Basi

bookCosa Sono le Liste?

Prerequisites
Prerequisiti

Immagina una situazione in cui si desidera memorizzare i nomi di tutti gli studenti che stanno frequentando un determinato corso. La prima soluzione che possiamo proporre è creare un Array:

index.cs

index.cs

copy
123456
using System; class Program { string[] studentNames = new string[50]; }

Tuttavia, se a un certo punto ci sono più di 50 studenti, non saremo in grado di memorizzare i loro nomi. Allo stesso modo, in una situazione in cui ci sono meno di 50 studenti, gli spazi non occupati nell'array rappresenteranno uno spreco di memoria - questo diventa un problema soprattutto con array di grandi dimensioni.

Qui abbiamo bisogno di una nuova struttura che possa memorizzare una quantità variabile di elementi. Fortunatamente, una tale struttura esiste già, si chiama Lista.

Le Liste sono molto simili agli Array, tuttavia il numero di elementi memorizzati in una lista può variare.

Note
Nota

È possibile modificare gli elementi esistenti in un Array, tuttavia non possiamo aggiungere nuove voci ad esso.

La seguente è la sintassi per dichiarare una lista vuota:

Utilizzando questa sintassi è possibile creare una lista per memorizzare i nomi degli studenti:

index.cs

index.cs

copy
12345678910
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); } }

È importante notare che è necessario importare il modulo Generic per poter utilizzare le Liste.

index.cs

index.cs

copy
1
using System.Collections.Generic;

È sufficiente aggiungere questa riga sotto using System; per importare il modulo richiesto.

Metodo Add()

Possiamo aggiungere elementi a una lista utilizzando il metodo Add:

index.cs

index.cs

copy
123456789101112131415
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); } }

Il codice sopra aggiungerà quattro elementi alla lista students.

Così come un array di tipo string può contenere solo elementi di tipo string, una lista di tipo string può accettare solo elementi di tipo string.

Indicizzazione

Il primo elemento è Anna, quindi avrà l'indice 0, mentre Laura avrà l'indice 1 e così via. Gli elementi di una lista possono essere accessibili tramite indicizzazione proprio come in un array:

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); } }

Metodo Count()

È possibile ottenere la lunghezza di una lista utilizzando l'attributo Count:

index.cs

index.cs

copy
123456789101112131415161718
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); Console.WriteLine(students.Count); } }

Lunghezza Dinamica

Nota che la lunghezza di una lista è dinamica (modificabile), quindi cambia man mano che aggiungiamo elementi:

index.cs

index.cs

copy
1234567891011121314151617181920
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); Console.WriteLine(students.Count); students.Add("Anna"); Console.WriteLine(students.Count); students.Add("Laura"); Console.WriteLine(students.Count); students.Add("Jacob"); Console.WriteLine(students.Count); students.Add("Aron"); Console.WriteLine(students.Count); } }

Inizializzazione

Possiamo anche inizializzare una lista con alcuni elementi utilizzando la seguente sintassi:

List<dataType> listName = new List<dataType>{ element1, element2, … };
index.cs

index.cs

copy
12345678910111213141516
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; // It is still possible to add additional elements after initialization students.Add("Markus"); Console.WriteLine(students.Count); Console.WriteLine(students[4]); } }

Iterazione sulle liste

Iterazione su una List in modo simile a come si esegue un ciclo su un Array

Utilizzo di un ciclo for

index.cs

index.cs

copy
123456789101112131415
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; for (int i = 0; i < students.Count; i++) { Console.WriteLine(students[i]); } } }

Utilizzo di un ciclo foreach

index.cs

index.cs

copy
123456789101112131415
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; foreach (string studentName in students) { Console.WriteLine(studentName); } } }
Note
Suggerimento:

Per rendere la sintassi di dichiarazione più breve, possiamo anche utilizzare la dichiarazione implicita. Ricordiamo che una dichiarazione esplicita consiste nello specificare il tipo di dato durante la dichiarazione della variabile.

index.cs

index.cs

copy
1
float number = 7.9f;

D'altra parte, con la dichiarazione implicita possiamo semplicemente utilizzare la parola chiave var e il compilatore deduce automaticamente il tipo di dato della variabile in base al valore assegnato:

index.cs

index.cs

copy
1
var number = 7.9f;

È possibile utilizzare la dichiarazione implicita anche durante la dichiarazione delle liste:

index.cs

index.cs

copy
1
var numbers = new List<int> { 1, 2, 3, 4, 5 };

1. Quale sarà l'output del seguente codice:

2. Quale modulo deve essere importato per utilizzare le liste?

3. Quale metodo viene utilizzato per ottenere la dimensione (lunghezza) di una lista?

question mark

Quale sarà l'output del seguente codice:

Select the correct answer

question mark

Quale modulo deve essere importato per utilizzare le liste?

Select the correct answer

question mark

Quale metodo viene utilizzato per ottenere la dimensione (lunghezza) di una lista?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

What is the difference between an array and a list in C#?

Can you show an example of how to add elements to a list?

How do I access elements in a list using indexing?

Awesome!

Completion rate improved to 2.04

bookCosa Sono le Liste?

Scorri per mostrare il menu

Prerequisites
Prerequisiti

Immagina una situazione in cui si desidera memorizzare i nomi di tutti gli studenti che stanno frequentando un determinato corso. La prima soluzione che possiamo proporre è creare un Array:

index.cs

index.cs

copy
123456
using System; class Program { string[] studentNames = new string[50]; }

Tuttavia, se a un certo punto ci sono più di 50 studenti, non saremo in grado di memorizzare i loro nomi. Allo stesso modo, in una situazione in cui ci sono meno di 50 studenti, gli spazi non occupati nell'array rappresenteranno uno spreco di memoria - questo diventa un problema soprattutto con array di grandi dimensioni.

Qui abbiamo bisogno di una nuova struttura che possa memorizzare una quantità variabile di elementi. Fortunatamente, una tale struttura esiste già, si chiama Lista.

Le Liste sono molto simili agli Array, tuttavia il numero di elementi memorizzati in una lista può variare.

Note
Nota

È possibile modificare gli elementi esistenti in un Array, tuttavia non possiamo aggiungere nuove voci ad esso.

La seguente è la sintassi per dichiarare una lista vuota:

Utilizzando questa sintassi è possibile creare una lista per memorizzare i nomi degli studenti:

index.cs

index.cs

copy
12345678910
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); } }

È importante notare che è necessario importare il modulo Generic per poter utilizzare le Liste.

index.cs

index.cs

copy
1
using System.Collections.Generic;

È sufficiente aggiungere questa riga sotto using System; per importare il modulo richiesto.

Metodo Add()

Possiamo aggiungere elementi a una lista utilizzando il metodo Add:

index.cs

index.cs

copy
123456789101112131415
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); } }

Il codice sopra aggiungerà quattro elementi alla lista students.

Così come un array di tipo string può contenere solo elementi di tipo string, una lista di tipo string può accettare solo elementi di tipo string.

Indicizzazione

Il primo elemento è Anna, quindi avrà l'indice 0, mentre Laura avrà l'indice 1 e così via. Gli elementi di una lista possono essere accessibili tramite indicizzazione proprio come in un array:

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); } }

Metodo Count()

È possibile ottenere la lunghezza di una lista utilizzando l'attributo Count:

index.cs

index.cs

copy
123456789101112131415161718
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); Console.WriteLine(students.Count); } }

Lunghezza Dinamica

Nota che la lunghezza di una lista è dinamica (modificabile), quindi cambia man mano che aggiungiamo elementi:

index.cs

index.cs

copy
1234567891011121314151617181920
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); Console.WriteLine(students.Count); students.Add("Anna"); Console.WriteLine(students.Count); students.Add("Laura"); Console.WriteLine(students.Count); students.Add("Jacob"); Console.WriteLine(students.Count); students.Add("Aron"); Console.WriteLine(students.Count); } }

Inizializzazione

Possiamo anche inizializzare una lista con alcuni elementi utilizzando la seguente sintassi:

List<dataType> listName = new List<dataType>{ element1, element2, … };
index.cs

index.cs

copy
12345678910111213141516
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; // It is still possible to add additional elements after initialization students.Add("Markus"); Console.WriteLine(students.Count); Console.WriteLine(students[4]); } }

Iterazione sulle liste

Iterazione su una List in modo simile a come si esegue un ciclo su un Array

Utilizzo di un ciclo for

index.cs

index.cs

copy
123456789101112131415
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; for (int i = 0; i < students.Count; i++) { Console.WriteLine(students[i]); } } }

Utilizzo di un ciclo foreach

index.cs

index.cs

copy
123456789101112131415
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; foreach (string studentName in students) { Console.WriteLine(studentName); } } }
Note
Suggerimento:

Per rendere la sintassi di dichiarazione più breve, possiamo anche utilizzare la dichiarazione implicita. Ricordiamo che una dichiarazione esplicita consiste nello specificare il tipo di dato durante la dichiarazione della variabile.

index.cs

index.cs

copy
1
float number = 7.9f;

D'altra parte, con la dichiarazione implicita possiamo semplicemente utilizzare la parola chiave var e il compilatore deduce automaticamente il tipo di dato della variabile in base al valore assegnato:

index.cs

index.cs

copy
1
var number = 7.9f;

È possibile utilizzare la dichiarazione implicita anche durante la dichiarazione delle liste:

index.cs

index.cs

copy
1
var numbers = new List<int> { 1, 2, 3, 4, 5 };

1. Quale sarà l'output del seguente codice:

2. Quale modulo deve essere importato per utilizzare le liste?

3. Quale metodo viene utilizzato per ottenere la dimensione (lunghezza) di una lista?

question mark

Quale sarà l'output del seguente codice:

Select the correct answer

question mark

Quale modulo deve essere importato per utilizzare le liste?

Select the correct answer

question mark

Quale metodo viene utilizzato per ottenere la dimensione (lunghezza) di una lista?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 1
some-alt