In questa lezione vedrai un altro sistema di conservazione dei dati tramite l’utilizzo dei dizionari. I dizionari sono simili alle array ma in questo caso invece di avere un indice numerico comune ogni valore ha un suo indice (chiave) che può essere di tipo anche diverso da un numero.
var/let nomeDizionario = [ chiave: valore, chiave: valore ]
In pratica come vedi nell’esempio tra le parentesi quadre invece di avere solo il valore come le Array, hai anche prima del valore una chiave separata tra due punti dove la chiave sostituisce l’indice comune presente nell’array.
La chiave va sempre rappresentata a sinistra, il valore a destra. La chiave deve essere univoca. Sia il tipo di chiave sia il tipo valore una volta dichiarato deve essere uguale per tutti. Se creo un dizionario dove le chiavi sono di tipo numerico non potrò inserire chiavi di tipo stringa stessa cosa per i valori.
Qundi possiamo dire che:
- Un Dizionario è formato da una coppia di dati, Chiave : Valore
- Può essere dichiarato in modo esplicito o implicito
- La chiave deve essere univoca e si deve trovare a sinistra dei due punti
- La chiave e il valore posso essere di tipo diverso
Esempio
// Dichiarazione Implicita var catalogo = [ "penna": "Penna a sfera di colore blu", "quaderno" : "Quaderdo a quadretti piccoli", "matita" : "Matita grande con punta fina" ] // Oppure var classifica = [ 1 : "Marco", 2 : "Luca", 3 : "Francesco", ] // In questi 2 esempio ho creato 2 dizionari inserendo direttamente i valori. // Nel primo caso ho creato un dizionario di tipo String : String nel secondo // invece ho creato un dizionario di tipo Int: String. // In entrambi i casi il valore di sinistra rappresenta la chiave e a destra il suo // valore che gli abbiamo assegnato. // Dichiarazione Esplicita var catalogo = [String: String]() var classifica = [Int: String]() // in questo caso gli ho detto al compliatore guarda, ho creato questi 2 dizionari // vuoti uno e di tipo String : String l'altro e di tipo Int : String // Nel continuo della lezione ti farò vedere come inserire i dati
Ora vediamo come leggere, aggiungere, modificare o eliminare i dati di un dizionario.
Leggere
Per leggere un elemento di un dizionario basta richiamarlo indicando la chiave.
Esempi
Stampare il valore print(catalogo[“libro”]) in questo modo sarà stampato il valore della chiave libro e se non esiste il compilatore non notificherà errore ma nil che vedremo quando parlerò dell’opzionalità.
Assegnare in valore a una variabile var miaVariabile = catalogo[“libro”]
ora la miaVariabile contiene il valore delle chiave libro
E’ possibile leggere anche l’intero dizionario tramite un clico che sarà trattato in una lezione successiva.
Aggiungere/Modificare
Ho inserito insieme sia l’inserimento che la modifica perchè il procedimento è uguale, in pratica posso procedere in 2 maniere:
catalogo[“penna”] = “la penna è rosso non blu”
catalogo.updateValue(“la penna è rosso non blu”, forKey: “penna”)
Posso usare per la modifica dei valori sia la forma diretta sia tramite la funzione updateValue(“valore”, forKey: “chiave”), in questo ultimo caso però, come avrai notato bisogna specificare prima il valore e poi la chiave.
Nel concreto gli ho detto, alla chiave penna modifica il Suo valore con quello indicato. Ovviamente i dati sono racchiusi tra le virgolette perchè sono di tipo String.
Per l’inserimento si usano le stesse procedure infatti se specifico un chiave che non esiste il compilatore aggiunge una nuova coppia di valori con i dati specificati
catalogo[“libro”] = “Questo è un nuovo libro”
catalogo.updateValue(“Questo è un nuovo libro”, forKey: “libro”)
Ora il dizionario avrà una nuova coppia di valori con chiave libro e come valore Questo è un nuovo libro.
Elimiare
Possiamo eliminare come le array sia uno specifico valore o meglio coppia di valori (Chiave, Valore) sia l’intero dizionario.
catalogo[“libro”] = nil
Elimino sia la chiave che il valore che ha come chiave libro
catalogo = [:]
Elimino intero dizionario
Per concludere voglio dirti che esiste anche un sistema per creare un array da un dizionario utilizzando questo sistema.
var a = Array(catalogo.keys)
In questo modo a sarà un array contenente tutte le chiavi del dizionario
var b = Array(catalogo.values)
In questo modo b sarà un array contenente tutti i valori del dizionario
Per qualunque dubbio o domanda scrivi un commento in questa lezione.
Ciao,
mi sto allenando con la definizione dei dati.
E relative nidificazioni (tipo Array di Dizionari che hanno l’elemento valore espresso da una Tuple e cose simili)
Cerco di fare le cose difficili, anche se magari nella pratica non le adotterò mai.
Così, solo per sperimentare e capire.
Nel codice che segue:
—————————————————————————————-
var miaVar: (p1: Int, p2: String, p3: [String: Int]) = (0, “”, [:])
var variabileIntera: Int = 0
miaVar = (1, “ciccio”, [“a”: 1,”b”: 2, “c”: 3])
print(miaVar.p1)
print(miaVar.p2)
print(miaVar.p3)
miaVar.p3[“a”]
variabileIntera = miaVar.p3[“a”]
print(miaVar.p3[“a”])
for elemento in miaVar.p3 {
print(elemento.value)
}
——————————————————————————
perché queste due istruzioni mi danno errore?
variabileIntera = miaVar.p3[“a”]
Mi da errore ROSSO : Value of optional type ‘Int?’ not unwrapped; did you mean to use ‘!’ or ‘?’?
print(miaVar.p3[“a”])
Mi da errore GIALLO : Expression implicitly coerced from ‘Int?’ to Any
mentre questa
miaVar.p3[“a”]
in playgraund (nella barra di destra) mi visualizza correttamente il valore?
Grazie
Ciao,
non so se hai già studiato l’opzionalità di un elemento , se no leggi la lezione testo o guarda quella video.
l’errore ti sta dicendo che essendo i dizionari di opzionale ovvero possono contenere un valore oppure nil devi o effettuare un controllo o utilizzare ! per recuperare il valore quindi
if let controllo = miaVar.p3[“a”]{
variabileIntera = controllo
}
Oppure
variabileIntera = miaVar.p3[“a”]!
mentre il giallo è un avviso perché stai solo stampando in console la variabile quindi non ti da errore ma ti sta avviso che la stessa è opzionale infatti ti scrive
Optional(1)
in questo caso quindi per eliminare l’avviso metti un !
print(miaVar.p3[“a”]!)
Perfetto, grazie!