Home Testo Corso Swift Introduzione ai Dizionari

Introduzione ai Dizionari

1020
3
Dizionari

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.

3 Commenti

  1. 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”]!)