Les dictionnaires en langage Swift sont des structures de données très pratiques pour stocker des informations sous forme de clés et de valeurs. Ils permettent de stocker des données de manière efficace et de les récupérer rapidement en utilisant des clés uniques. Nous allons explorer les différentes façons de créer et d'utiliser les dictionnaires en Swift, ainsi que les fonctionnalités avancées qui les rendent si puissants. Nous verrons comment ajouter, supprimer et mettre à jour des éléments, comment parcourir les éléments d'un dictionnaire et comment utiliser les dictionnaires pour résoudre des problèmes courants de programmation.
Création d'un dictionnaire
Création d'un dictionnaire vide :
var namesOfIntegers = [Int: String]()
// Nous venons de créer un dictionnaire vide
namesOfIntegers[16] = "sixteen"
// Maintenant, il contient 1 paire clé-valeur
namesOfIntegers = [:]
// namesOfIntegers est désormais un dictionnaire vide de type [Int: String]
Création d'un dictionnaire avec différentes clés-valeurs :
var airports: [String: String] = ["PRR": "Paris", "DUB": "Dublin"]
Comme les tableaux (Array), un dictionnaire peut-être déclaré sous forme de constante ou de variable. Dans l'exemple ci-dessus, les clés sont du type String et les valeurs sont du type String.
var airports = ["PRR": "Paris", "DUB": "Dublin"]
// Plus rapide, le type est déduit automatiquement
Lire et modifier un dictionnaire
Compter le nombre d'élément clés-valeurs d'un dictionnaire
airports.count
// Le dictionnaire contient 2 éléments
Vérifier si un dictionnaire est vide
if airports.isEmpty {
// count = 0, dictionnaire vide
print("Le dictionnaire est vide")
} else {
print("Le dictionnaire contient un élément au minimum")
}
// Cela affiche : "Le dictionnaire contient un élément au minimum"
Ajouter ou modifier l'élément d'un dictionnaire
Vous pouvez ajouter un nouvel élément à un dictionnaire avec une syntaxe d'indice. Utilisez une nouvelle clé du type approprié comme index d'indice et affectez une nouvelle valeur du type approprié :
airports["LHR"] = "London"
airports["LHR"] = "Heathrow"
// Modifie une valeur existante
Au lieu de l'indice, utilisez la méthode updateValue(_:forKey:) d'un dictionnaire pour définir ou mettre à jour la valeur d'une clé particulière. La méthode updateValue(_:forKey) définit une valeur pour une clé s'il n'y en a pas, ou met à jour la valeur si cette clé existe déjà.
Contrairement à un indice, la méthode updateValue(_:forKey:) renvoie l'ancienne valeur après avoir effectué une mise à jour. Cela vous permet de vérifier si une mise à jour a eu lieu ou non.
La méthode updateValue(_:forKey:) renvoie une valeur facultative du type de valeur du dictionnaire. Pour un dictionnaire qui stocke des valeurs String, par exemple, la méthode renvoie une valeur de type String? ou "String optional". Cette valeur facultative contient l'ancienne valeur de cette clé s'il en existait une avant la mise à jour ou nil si aucune valeur n'existait :
if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
print("L'ancienne valeur pour la clé : DUB est \(oldValue).")
} // Cela affiche : "L'ancienne valeur pour la clé : DUB est Dublin."
Utilisez la syntaxe d'indice pour récupérer une valeur du dictionnaire pour une clé particulière. Comme il est possible de demander une clé pour laquelle aucune valeur n'existe, l'indice d'un dictionnaire renvoie une valeur optionnelle du type de valeur du dictionnaire. Si le dictionnaire contient une valeur pour la clé demandée, l'indice renvoie une valeur facultative contenant la valeur existante pour cette clé. Sinon, l'indice renvoie nil :
if let airportName = airports["DUB"] {
print("Le nom de l'aéroport est \(airportName).")
} else {
print("Cet aéroport n'est pas dans notre dictionnaire")
}
// Cela affiche "Le nom de l'aéroport est Dublin Airport."
Supprimer un élément du dictionnaire
Vous pouvez utiliser la syntaxe d'indice pour supprimer une paire clé-valeur d'un dictionnaire en attribuant la valeur nil à cette clé :
airports["APL"] = "Apple International"
// On insert un nouvel élément
airports["APL"] = nil
// Puis APL est supprimé du dictionnaire
Ou la méthode removeValue(forKey:) :
if let removedValue = airports.removeValue(forKey: "DUB") {
print("Le nom de l'aéroport supprimer est \(removedValue).")
} else {
print("Notre dictionnaire ne contient pas de valuer pour la clé DUB")
}
// Cela affiche "Le nom de l'aéroport supprimer est Dublin Airport."
Parcourir un dictionnaire
Chaque élément du dictionnaire est retourné sous forme de tuple (clé, valeur).
for (airportCode, airportName) in airports {
print("\(airportCode): \(airportName)")
}
// LHR: London Heathrow
// YYZ: Toronto Pearson
Vous pouvez également récupérer une collection itérable des clés ou des valeurs d'un dictionnaire en accédant à ses propriétés keys et values :
for airportCode in airports.keys {
print("Code de l'aéroport : \(airportCode)")
}
// Code de l'aéroport : LHR
// Code de l'aéroport : YYZ
for airportName in airports.values {
print("Nom de l'aéroport : \(airportName)")
}
// Nom de l'aéroport : London Heathrow
// Nom de l'aéroport : Toronto Pearson
Si vous avez besoin d'utiliser les clés ou les valeurs d'un dictionnaire avec une API qui prend une instance Array, initialisez un nouveau tableau avec la propriété keys ou values :
let airportCodes = [String](airports.keys)
// airportCodes vaut ["LHR", "YYZ"]
let airportNames = [String](airports.values)
// airportNames vaut ["London Heathrow", "Toronto Pearson"]