Compatibile con Xcode 8

Array e Dizionari in Swift. Le collezioni d’elementi

Con gli Array  e Dizionari in Swift ti introduco un metodo più ampio per la conservazione dei dati rispetto alle var e alle let del linguaggio swift. Con le variabili e le costanti hai visto uno dei primi metodi di conservazione delle informazioni. Sono scatole ognuna diversa dall’altra che trasportano una precisa informazione.

E se volessi conservare più informazioni che riguardano lo stesso argomento?

Molte applicazioni permettono di conservare i punteggi delle partite disputate. Conservare i punteggi con le var e let significherebbe dover creare un numero non definito di variabili che renderebbe poco leggibile e poco funzionale il codice:

Ecco perché sono stati creati gli Array e Dizionari in Swift. Gli array e dizionari del linguaggio Swift ti permetteranno di salvare le informazioni tutte in un’unica variabile o costante senza, quindi, doverne definire diverse.

Pensa ad un’applicazione che ha una lista di alimenti per la spesa. Tutti quegli alimenti, per esempio “pasta” “carne” e “cotolette” non verranno memorizzati in tre variabili differenti, bensì in una sola che farà da contenitore.

Più facile a farsi che a dirsi. Quindi sei pronto a vedere gli array e dizionari in swift? Allora, cominciamo!

Array linguaggio Swift

Puoi considerare un Array come un lungo treno dove ogni vagone contiene l’informazione da conservare. Ogni treno è una collezione potenzialmente infinita di vagoni che trasportano un’informazione. Ogni vagone, inoltre, è accessibile tramite un indice (un numero di identificazione).

Fai finta che all’interno di una scatola (una variabile) stai buttando, invece di una singola informazione, tante altre scatole tutte delle stesso tipo. I passaggi da fare per l’inizializzazione di un Array sono i seguenti:

  • Definire una variabile o costante.
  • Assegnargli un Array di valoriI valori sono racchiusi da parentesi quadre e divisi, l’uno dall’altro, da una virgola:
Adesso la variabile “vettore” rappresenta l’Array per tutta la sua interezza. Infatti se nel codice scrivi print(array), la funzione stamperà tutti i valori contenuti all’interno della variabile:
Qual’è il tipo di dato del vettore? Nella lezione precedente ti ho detto che esistono delle famiglie che descrivono i valori che puoi assegnare ad una var o let. Per esempio gli Int sono la famiglia dei numeri interi e String descrive le parole.

Nel caso dell’array che hai inizializzato nell’esercizio, i valori contenuti all’interno sono degli Int. Dato che un array è descritto dalle parentesi quadre [], il tipo di un array si forma inserendo il tipo di dato all’interno delle parentesi. Esempio, se volessi creare un array di String e volessi anche assegnare il tipo in maniera esplicita, scriverei:

  • Esercizio 0. Crea ed inizializza un array di numeri Double. Definisce in maniera esplicita il suo tipo di dato.

Accedere agli elementi dell’array

Considera il seguente Array di Interi:

Punteggi ormai sai che rappresenta l’intera lista degli elementi contenuti in esso, ma come accedo ad un singolo elemento della lista?

All’inizio della lezione ti ho detto che l’Array in Swift non è altro che una sorta di treno dove ogni vagone contiene l’informazione. Ogni vagone inoltre è identificato da un indice.

Nel primo vagone c’è il numero 20, nel secondo il numero 55 e così via.

L’indice parte sempre da zero fino ad arrivare ad un numero grande quanto il numero di elementi contenuti meno uno.

Perché N-1? Immagina un Array di 10 elementi.

Se il conteggio degli elementi parte da 0, per arrivare a 10 deve fermarsi al numero 9. infatti 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 sono 10 numeri e non 9 come erroneamente potresti pensare.

Con il linguaggio Swift, per poter accedere ad ogni singolo vagone dell’Array, devi utilizza questa notazione:

Quindi per accedere all’informazione contenuta alla posizione iesima, si esplicita vicino al nome dell’Array, la posizione dell’elemento cercato. Utilizzando la sintassi nomearray [numeroPosizione]:

Array del linguaggio Swift

Di fatto dichiarando la posizione non fai altro che accedere all’informazione della scatola alla posizione X contenuta nell’Array.

Un vettore può contenere diversi tipi d’informazione, cioè valori che appartengono a diversi tipi di dato:

In questa prima parte del corso gratuito non utilizzeremo questa sintassi. Cioè ti farò scrivere array che hanno tutti lo stesso tipo di dato. Il motivo di tale scelta verrà spiegata nell’ultimo modulo del corso quando arriverai alla programmazione ad oggetti.

Tipi di dato vuoti o di partenza

Se non vuoi inizializzare subito un Array, cioè non vuoi dargli un valore iniziale, il linguaggio Swift ti da la possibilità di inizializzarlo come vuoto. Per inizializzare un Array come vuoto devi:

  • Dichiarare una variabile.
  • Assegnargli il tipo di dato che dovrà contenere, tra parentesi quadre, e aggiungere due parentesi tonde.

Quindi se vuoi inizializzare un Array di interi e lasciarlo vuoto devi fare:

Il motivo delle parentesi tonde lo scoprirai quando arriverai a studiare la programmazione ad oggetti. Per il momento, quello che ti interessa sapere è che puoi assegnare il tipo di dato per rendere vuoto un vettore. Lo stesso discorso vale anche per le normali variabili infatti:

Prova a stampare il contenuto dell’Array, scoprirai che verranno stampate solo le parentesi quadre le quali non hanno niente al loro interno:

Problema nella dichiarazione

Attenzione! C’è una piccola differenza tra inizializzato e dichiarato infatti prova ad eseguire il seguente codice:

Cosa facilmente risolvibile così:

Questo pseudo errore verrà corretto nelle prossime lezioni, tanto per il momento hai già tutti gli strumenti per creare un Array.

Array vuoto del linguaggio swift

Le operazioni

Prima di procedere voglio metterti un attimo alla prova.

Se io ora ti chiedessi di inizializzarmi un Array di Double, con valori a scelta, riusciresti a svolgere quest’esercizio?

Il mio consiglio è il seguente. Prima di svolgere ogni esercizio prova a risolverlo concettualmente. Ovvero fai, mentalmente o su carta, una lista di ciò che ti serve, dividi il problema in passaggi e svolgine uno alla volta.

La mia mappa mentale, per risolvere l’esercizio, è la seguente:

  • Devo definire una variabile e renderla di tipo: Array di Double.
  • Ma devo anche inizializzarla, quindi devo assegnargli dei valori alla creazione.

Ecco che l’esercizio richiesto si svolge così:

Ci sei riuscito? Se si, prova da solo a fare lo stesso esercizio però inizializzando un Array di String.

Assegnare una lista

Ora ti assegno un nuovo esercizio e nel frattempo ne approfitto per ribadire alcuni concetti.

Esercizio 1. Dichiara una variabile di tipo vettore di String, poi assegna una lista di 2 elementi al vettore e stampa i suoi elementi.

  • Questa volta l’esercizio richiede una Dichiarazione.
  • Successivamente devo assegnargli una lista (quindi un vettore) di String di due elementi a scelta.
  • E infine stampare i due unici due elementi.

Sommare due array

Un Array può essere sommato ad un altro, con l’unica differenza che l’operazione di somma unisce le due liste di elementi.

  • Metodo 1. Utilizzare un terzo Array, detto di supporto:
  •  Metodo 2. Ampliare un vettore esistente con l’aggiunta degli altri:
Ti ricordo che, per le variabili, l’operatore += non fa altro che sommare un valore al suo stesso valore, ad esempio:
Attenzione perché lo stesso principio non vale per la sottrazione, ma non preoccuparti troverai una soluzione nelle lezioni successive.

Modificare un elemento dell’Array

Ti ricordi quando ti dicevo che un Array non è altro che una scatola con più scatole uguali all’interno?

Quando accedi alla posizione x di un Array di fatto stai considerando la scatola interna contenuta dall’Array in quella posizione. Peppe, ma scatola non lo usi come sinonimo di variabile? Esatto.

Questo ti permette, oltre alla visualizzazione dell’elemento al suo interno, di aggiungere e modificarne il contenuto.

Ecco cosa mostra il Playground:

modifica di un array in swift

Nell’esempio ho sbagliato volontariamente a riempire il vettore. Avrei voluto inserire i numeri 1, 2 e 3 ma ho erroneamente messo un 4 al posto del 3. Per sostituirlo non ho fatto altro che:

  • Accedere al valore della scatola alla posizione 2 (dato che il conteggio parte da 0, significa che sto leggendo il terzo elemento).
  • Assegnargli un nuovo valore (Stessa identica procedura utilizzata per le variabili).

Nell’esempio non utilizzo la print per visualizzare i valori. Questa particolare sintassi vale solo ed esclusivamente all’interno del Playground e ti permette di evitare di scrivere ogni volta print.

La funzione append. Aggiungere un nuovo elemento all’Array in modo semplice e veloce.

Spesso capita di dover aggiungere degli elementi in seguito alla creazione dell’Array. Pensa ad una lista della spesa dove solo in seguito ti accorgi che manca qualcosa. Si, tutti dimentichiamo di comprare qualcosa al supermercato!

Don’t worry, be happy.

Fortunatamente il linguaggio Swift, oltre alla print, ti mette a disposizione svariate funzioni che ti aiutano nella scrittura del codice. Tra queste, una che mi sento in dovere di farti conoscere subito è la funzione append. Te lo ripeto, anche se per il momento non sai da dove saltano fuori e non sai cosa siano le funzioni, non preoccuparti! Prendi per buono quello che ti sto dicendo.

Cosa fa questa misteriosa funzione append? La funzione append permette di aggiungere un nuovo elemento in coda all’Array.

Per accedere alla funzione append di un Array in Swift, ti basta inserire un punto dopo il nome del vettore e selezionare la funzione append (ma tu guarda, esistono tantissime altre funzioni):

le funzioni degli array in swift

A questo punto, utilizza la funzione append per aggiungere ad un Array un nuovo elemento:

array append swift

La funzione count. Scoprire velocemente da quanti elementi è formato un array

In quest’altro esempio ti mostro la funzione count che ti restituisce il numero di elementi contenuti nell’Array :

Se non capisci qualcosa dell’ultimo esercizio, ti invito a rileggerti tutta la lezione prima di continuare con i dizionari.

Operazioni tra Array e funzioni linguaggio swift

Dizionari linguaggio Swift

Un Dizionario è una collezione binaria di elementi, dove al primo membro troviamo la chiave unica e al secondo membro il valore. Come i nostri dizionari associano ad una parola un significato, i dizionari informatici fanno lo stesso.

Ammettiamo che devi cercare la parola “informatica” in un vocabolario, cosa fai?

  • Sfogli a caso il vocabolario finché non trovi la parola informatica?
  • Vai all’indice “I” e poi cerchi la parola informatica?

Mi sembra più sensata la seconda opzione. Ma cosa centra con il Dizionario in Swift?

Beh centra! Un Dizionario in Swift ha le stesse peculiarità, ti permette di definire una lista dove ogni elemento della lista è composto da una coppia, la chiave e il valore.

La chiave ha lo scopo di catalogare e descrivere il tipo di informazione. Puoi considerarla come l’estensione dell’indice che rappresenta la posizione in un Array. In un Array, per così dire, la chiave è in qualche modo rappresentata dall’indice che, a differenza, è solo numerico.

Il valore associato alla chiave è il vero portatore dell’informazione del Dizionario.

Con il linguaggio Swift, la procedura per rappresentare un Dizionario, è simile a quella dell’Array. L’unica differenza sta nell’esplicitare la chiave:

Le parentesi quadre ti fanno subito notare come la struttura sia simile a quella di un Array Swift, la differenza sta nel fatto che, come elemento va inserita una coppia “chiave”: “valore”, separata dalle restanti da una virgola.

La chiave va sempre rappresentata a sinistra, il valore a destra.

Ritornando all’esempio del Dizionario reale, ecco come potresti rappresentare un Dizionario in Swift:

Accedere ai contenuti del Dizionario

Il processo è tale e quale a quanto visto con i vettori. L’unica cosa è che devi sostituire l’indice numerico con la chiave desiderata:

P.S. se nel Playground ti spunta qualcosa come -> Optional(…), non preoccuparti è normale e verrà corretto nelle prossime lezioni.

Dizionari linguaggio swift

Aggiunta e modifica di un elemento

Ovviamente i dizionari informatici non hanno il solo compito di descrivere le parole ma possono essere estesi nell’utilizzo.

Ad esempio, crea un Dizionario per la gestione dello staff di un’azienda:

Se a tale Dizionario volessi aggiungere un nuovo lavoratore non dovrei far altro che esplicitare una nuova chiave e assegnargli un valore. La stessa identica cosa va fatta quando vuoi modificare il valore di una chiave:

dizionario playground swift

Dizionario vuoto

Stessa pasta e cucuzza! In più al tipo del valore devi definire il tipo della chiave, ovviamente chiave e valore possono avere tipi differenti:

La funzione updateValue. Aggiungere e modificare un valore del Dizionario

Anche per i Dizionario esiste una funzione apposita per l’aggiunta di un elemento. In questo caso però la funzione in questione si chiama updateValue e si comporta in questa maniera:

  • Se esiste la chiave in questione allora modifica il valore.
  • Se la chiave non esiste crea la chiave e gli da quel valore.

Per utilizzare la funzione updateValue devi sempre esplicitare la chiave e il valore da aggiungere o modificare, quindi considera il seguente esempio:

Stampare un Dizionario. La stampa casuale dei valori

Se hai già provato a stampare un Dizionario, quindi hai provato a fare qualcosa del genere:

Avrai sicuramente notato la stampa in ordine casuale e non ordinata per chiave.

Stampa di un Dizionario

La stampa di un Dizionario in modo casuale è di default imposta dal linguaggio Swift e non può essere modificata se non con strumenti avanzati che verranno trattati a fine corso, quindi, non preoccuparti, è assolutamente normale che vengano stampati così.

Esercizi della lezione

Se il tuo quiz dovesse essere stato valutato, con un punteggio non perfetto, quasi sicuramente troverai una spiegazione sul perché non hai preso il massimo e sull’errore che hai commesso (per visualizzare le correzioni devi cliccare sul link che ti arriva per email o tornare sulla pagina del quiz).

Ricordo ancora una volta che per accedere agli esercizi della lezione devi essere registrato al sito.

Quiz e esercizi lezione non risolti

Se non sei registrato e non vuoi farlo ti scrivo comunque alcuni dei test ed esercizi che propongo a chi segue attivamente il corso di programmazione Swift.

  • Crea un Dizionario vuoto con chiave: Int e valore: String. Una volta creato riempilo con valori a piacere. Poi aggiungi un nuovo elemento con la funzione updateValue.
  • Se “var vettore = [11, 32, 44, 55]” è un Array di Int allora print(vettore[2]) stamperà?
  • Cosa fa la funzione append?
  • Posso sottrarre un vettore ad un altro vettore?
  • Puoi creare un Array di costanti?

Buona Programmazione!

Torna a: Corso gratuito linguaggio di programmazione Swift > Le basi del linguaggio Swift

Start typing and press Enter to search

Variabili e Costanti in SwiftCiclo for in Swift