• 10 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 23/04/2024

Organisez vos données avec les dictionnaires

Dans ce chapitre, nous allons parler des dictionnaires ! Rassurez-vous, nous allons laisser nos amis Robert, Larousse et compagnie tranquilles.

Car notre programme commence à vraiment prendre forme, mais il y a quelque chose qui me chiffonne. Cette histoire de tableau, c'est bien. Mais il y a quelque chose qui n'est pas très pratique ici :

// La grange de Joe : [lait, blé, laine]
var barn = [0, 0, 0]

Sans le commentaire au-dessus, il est difficile de savoir à quelle marchandise correspond chaque zéro. Dans le code, on n’a que trois zéros à la suite l'un de l'autre. Pire encore, il est très facile de se tromper :

// Joe moissonne
barn[1] += 100

Ici, j'aurais très facilement pu écrire  barn[2]  , et me tromper sans m'en rendre compte. On va découvrir ensemble comment les dictionnaires vont nous permettre de clarifier tout ça !

Découvrez les dictionnaires

Un dictionnaire est une collection. Pour rappel, il y a trois types de collections différents en Swift :

  • Les tableaux qui n'ont plus de secrets pour vous.

  • Les dictionnaires que nous allons découvrir tout de suite.

  • Les sets que nous verrons dans un autre cours. 

Un dictionnaire est une liste organisée par clé. En fait, ça fonctionne comme un vrai dictionnaire. Dans un vrai dictionnaire, à chaque mot correspond une définition. Dans un dictionnaire en Swift, à chaque clé correspond une valeur.

C'est quoi cette histoire de clé ?

J'y viens ! Prenons un exemple pour comprendre. Pour créer un dictionnaire, on va utiliser la syntaxe suivante :

var ages: [String: Int] = ["Michel": 34, "Paul": 22, "Fred": 67, "Jean": 15]

Dans le dictionnaire précédent, je stocke les âges de mes amis Michel, Paul, Fred et Jean. Contrairement aux tableaux où j'aurais juste écrit les âges les uns à la suite des autres, là je crée une clé pour chaque âge qui correspond au nom de l'ami concerné. C'est avec cette clé que je vais pouvoir récupérer mes valeurs.

Le programme va stocker les informations comme ceci :

Dans la première ligne, les noms : Michel, Paul, Fred, Jean. Dans la deuxième ligne, les âges correspondants : 34, 22, 67, 15.
Le dictionnaire ages

C'est ce qu'on appelle une association clé-valeur. La clé ici étant le prénom, et la valeur, l'âge.

La syntaxe générique de création d'un dictionnaire est donc :

[clé1: valeur1, clé2: valeur2]

On utilise les deux-points   :   pour séparer la clé et la valeur. 

Le type des dictionnaires

Si vous faites attention, vous remarquerez qu'un dictionnaire est la combinaison de deux types : un type pour la clé, et un type pour la valeur. On note le type d'un dictionnaire comme ceci :   [TypeDeLaClé: TypeDeLaValeur]   . Dans notre exemple, ce serait :   [String: Int]   . Les prénoms sont des chaînes de caractères, et les âges des nombres entiers.

Comme pour les tableaux et les variables, on ne peut pas faire n'importe quoi avec les dictionnaires. En particulier :

  • Les types de la clé et de la valeur ne peuvent pas être modifiés.

  • Les types de la clé et de la valeur sont toujours connus.

  • Il n'y a qu'un seul type de clé et qu'un seul type de valeur dans un même dictionnaire.

Vous commencez à comprendre que de manière générale en Swift, les types, ça ne bouge pas !

var metiers: [String: String] = ["Pierre": "Boulanger", "Fred": "Plombier"]
[true: "C'est vrai !", false: "C'est faux !"] // A pour type [Bool: String]

À vous de jouer

Le contenu de l’exercice se trouve dans le dossier Github P3C2.1.

  1. Ouvrez un nouveau Playground Xcode.

  2. Copiez le contenu du fichier “main.swift” dans votre Playground.

  3. Suivez les instructions.

Jouez avec les dictionnaires !

Déclarez un dictionnaire vide

Maintenant que l'on sait écrire le type d'un dictionnaire, le plus simple pour déclarer un dictionnaire vide, c'est d'utiliser son type comme ceci :

var monDictionnaireVide: [String: Int] = [:]

Modifiez et accédez aux données

Dans un tableau, on récupérait les valeurs en utilisant l'index comme ceci :

barn[1] // Contient le nombre de bottes de blé stocké

Dans un dictionnaire, on récupère les valeurs en utilisant une clé, par exemple comme ceci :

barn["wheat"] // Contient le nombre de bottes de blé

Pour modifier les données, il suffit comme pour les tableaux d'attribuer une nouvelle valeur, cette fois en utilisant la clé.

barn["wheat"] = 100 // La clé "wheat" contient maintenant la valeur 100

Définissez la mutabilité des dictionnaires

Je sais que vous le savez, mais je vous le dis quand même : pour déclarer un dictionnaire modifiable, on utilise  var  ; si on veut qu'il soit constant, on utilise  let  .

Dans un dictionnaire constant, on ne peut rien modifier : aucun ajout/modification/suppression de couple clé-valeur.

Ajoutez et supprimez des éléments

Pour ajouter des éléments, rien de plus simple ! On utilise la même syntaxe que pour modifier un élément. Il suffit de prendre une clé non utilisée. Exemple :

var countries: [String: String] = ["FR": "France", "IT": "Italie", "UK": "United King"]
// Je modifie la valeur, car la clé "UK" existe déjà
countries["UK"] = "United Kingdom"
// J'ajoute une valeur, car la clé "ES" n'existe pas
countries["ES"] = "Espagne"

Pour supprimer des éléments, on utilise la fonction  remove  comme ceci :

countries.removeValue(forKey: "ES")
// L'association "ES": "Espagne" est supprimée

Comptez les éléments

Pour compter les éléments dans un dictionnaire, on utilise la même propriété que pour les tableaux :  count  .

countries.count // Renvoie 3

Parcourez un dictionnaire

Vous vous souvenez de la boucle for pour parcourir les tableaux ? On peut faire la même chose avec les dictionnaires ! Seulement, un dictionnaire, contrairement à un tableau, contient deux types de données : la clé et la valeur. Donc pour accéder aux deux, Swift propose une syntaxe spécifique :

for (cle, valeur) in dictionnaire {
// Dans le code, on peut utiliser la clé et la valeur
}

Par exemple, avec notre dictionnaire  pays  , on pourrait écrire :

for (code, country) in countries {
   print("Le pays \(country) a pour code \(code)")
}

Je vous propose le petit exercice suivant. En utilisant un dictionnaire, rédigez un programme qui permet d'afficher les tailles des membres de votre famille, et qui donne à la fin la taille cumulée de tout le monde. Dans la console, vous devriez avoir quelque chose de ce type :

Papa mesure 1.78m 
Céleste mesure 1.73m 
Iris mesure 1.64m 
Ambroise mesure 1.81m 
Maman mesure 1.71m 
Si on montait sur les épaules les uns des autres, on mesurerait 8.66m.

À vous de jouer ! Avant de regarder la solution ci-dessous, essayez par vous-même.

var family: [String: Int] = ["Papa": 1.78, "Maman": 1.71, "Iris": 1.64, "Céleste": 1.73, "Ambroise": 1.81]
var cumulatedSize = 0.0

for (name, size) in family {
   print("\(name) mesure \(size)m")
   cumulatedSize += size
}
print("Si on montait sur les épaules les uns des autres, on mesurerait \(cumulatedSize)m.")

C'est le moment où vous êtes impatient de modifier votre programme ! Et on ne va pas le faire...

Je sais, vous êtes déçu. Moi aussi. Mais si je vous laisse partir tête baissée avec votre dictionnaire, vous risquez de vous planter... Vous pouvez essayer, d'ailleurs !

Pour réussir, vous avez besoin de connaître les optionnels. Ça tombe bien, c'est le sujet du prochain chapitre ! Elle est pas belle la vie ?

En résumé

Pour vous consoler, je vous ai fait un magnifique tableau pour résumer ce que vous savez sur les tableaux et les dictionnaires. Sympa le type.

 

Tableau
Une liste ordonnée
numériquement

Dictionnaire
Une liste organisée par clé

Syntaxe

[element 1, element 2]

[clé1: valeur1, clé2: valeur 2]

Syntaxe du type

[Type]

[TypeDeLaClé: TypeDeLaValeur]

Création de l’objet vide

[Type] = []

Si le type est connu: []

[TypeDeLaClé: TypeDeLaValeur] = [:]

Si le type est connu: [:]

Accéder aux données

monTableau[0]

On utilise l’index

monDictionnaire[clé]

On utilise la clé

Modifier les données

monTableau[0] = 12

On utilise l’index

monDictionnaire[clé] = 12

On utilise la clé

Ajouter une donnée

monTableau.append(23)
monTableau.insert(23, at 1)

monDictionnaire[nouvelleClé] = 23
On utilise une nouvelle clé

Supprimer une donnée

monTableau.remove(at: 1)

monDictionnaire.removeValue(for key: clé)

Compter les données

monTableau.count

monDictionnaire.count

Parcourir

for element in monTableau {

}

for (clé, valeur) in monDictionnaire {

}

Maintenant que vous savez utiliser les dictionnaires afin de manipuler vos données, je vous invite à passer au chapitre suivant ! ;)

Exemple de certificat de réussite
Exemple de certificat de réussite