Stringhe e Liste
Stringhe
In C# string e' un tipo riferimento immutabile: ogni operazione che
"modifica" una stringa crea in realta' un nuovo oggetto in memoria.
Dichiarazione e inizializzazione
string saluto = "Ciao, mondo!"; string vuota = ""; // stringa vuota
Interpolazione e concatenazione
L'interpolazione (prefisso $) e' la forma preferita perche' piu'
leggibile; la concatenazione con + e' ammessa ma crea oggetti
temporanei ad ogni operazione.
string nome = "Alice"; int eta = 20; // interpolazione string messaggio = $"Mi chiamo {nome} e ho {eta} anni."; // concatenazione string messaggio2 = "Mi chiamo " + nome + " e ho " + eta + " anni.";
Proprieta' e funzioni principali
| Funzione | Descrizione |
|---|---|
.Length |
numero di caratteri |
.ToUpper() |
converte in maiuscolo |
.ToLower() |
converte in minuscolo |
.Trim() |
rimuove spazi iniziali e finali |
.Contains(s) |
restituisce true se la sottostringa s e' presente |
.StartsWith(s) |
restituisce true se inizia con s |
.EndsWith(s) |
restituisce true se finisce con s |
.Replace(old,new) |
sostituisce tutte le occorrenze di old con new |
.Substring(i,n) |
estrae n caratteri a partire dall'indice i |
.IndexOf(s) |
indice della prima occorrenza di s (-1 se assente) |
.Split(sep) |
divide la stringa in un array usando sep |
string.Join(sep,a) |
unisce gli elementi di a con il separatore sep |
Le funzioni restituiscono la stringa modificata.
string frase = " Ciao, Mondo! "; string tmp; Console.WriteLine(frase.Trim()); // "Ciao, Mondo!" tmp = frase.Trim().ToLower(); Console.WriteLine(tmp); // "ciao, mondo!" var lunghezza = frase.Trim().Length; Console.WriteLine(lunghezza); // 12 Console.WriteLine(frase.Contains("Mondo")); // True tmp = frase.Replace("Mondo", "C#"); Console.WriteLine(tmp); // " Ciao, C#! " string parte = "abcdefgh"; tmp = parte.Substring(2, 4); // "cdef" Console.WriteLine(parte.IndexOf("de")); // 3 (posizione a partire da posizione 0)
Split e Join
Split e Join permettono di convertire una stringa in array e viceversa.
string csv = "mela,pera,banana,kiwi"; // split: da stringa ad array string[] frutti = csv.Split(','); foreach (string f in frutti) Console.WriteLine(f); // mela \n pera \n banana \n kiwi // join: da array a stringa string lista = string.Join(" - ", frutti); Console.WriteLine(lista); // mela - pera - banana - kiwi
StringBuilder
Quando e' necessario costruire una stringa con molte concatenazioni
(ad esempio in un ciclo) si usa StringBuilder, che lavora su un
buffer interno evitando la creazione di oggetti temporanei.
using System.Text; StringBuilder sb = new StringBuilder(); for (int i = 1; i <= 5; i++) { sb.Append($"riga {i}\n"); } string risultato = sb.ToString(); Console.WriteLine(risultato);
Liste
List<T> e' una collezione (un tipo di contenitore) generica a dimensione variabile.
A differenza degli array, la sua dimensione puo' crescere o diminuire dinamicamente.
Dichiarazione e inizializzazione
Dobbiamo includere System.Collections.Generic per farne uso
using System.Collections.Generic; // lista vuota di interi List<int> numeri = new List<int>(); // List<int> e' il tipo, dobbiamo quindi // usarlo ogni volta in cui andra' indicato il tipo // lista inizializzata con valori List<string> nomi = new List<string> { "Alice", "Bob", "Carlo" };
Aggiungere e rimuovere elementi
| Metodo | Descrizione |
|---|---|
.Add(elemento) |
aggiunge in fondo |
.Insert(i, elem) |
inserisce elem alla posizione i |
.Remove(elem) |
rimuove la prima occorrenza di elem |
.RemoveAt(i) |
rimuove l'elemento all'indice i |
.Clear() |
svuota la lista |
.Count |
numero di elementi presenti |
List<string> spesa = new List<string>(); spesa.Add("latte"); spesa.Add("pane"); spesa.Add("uova"); spesa.Insert(1, "burro"); // inserisce "burro" all'indice 1 Console.WriteLine(spesa.Count); // 4 spesa.Remove("pane"); // rimuove "pane" spesa.RemoveAt(0); // rimuove il primo elemento foreach (string articolo in spesa) Console.WriteLine(articolo); // burro / uova
Cercare elementi
List<int> voti = new List<int> { 6, 8, 7, 9, 6, 10 }; Console.WriteLine(voti.Contains(9)); // True Console.WriteLine(voti.IndexOf(6)); // 0 (prima occorrenza) Console.WriteLine(voti.Count); // 6
Ordinamento
List<int> valori = new List<int> { 5, 2, 8, 1, 9, 3 }; valori.Sort(); // ordine crescente foreach (int v in valori) Console.Write($"{v} "); // 1 2 3 5 8 9 valori.Reverse(); // inverte l'ordine foreach (int v in valori) Console.Write($"{v} "); // 9 8 5 3 2 1
Iterazione con foreach e indice
List<string> colori = new List<string> { "rosso", "verde", "blu" }; // foreach: consigliato quando non serve l'indice foreach (string colore in colori) Console.WriteLine(colore); // for con indice: utile quando serve la posizione for (int i = 0; i < colori.Count; i++) Console.WriteLine($"[{i}] {colori[i]}");
Convertire tra array e lista
// array -> lista string[] arrNomi = { "Anna", "Luca", "Sara" }; List<string> listaNomi = new List<string>(arrNomi); // lista -> array string[] arrCopia = listaNomi.ToArray();