Menu
Coddy logo textTech

Parcourir des dictionnaires

Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 15 sur 56.

L'itération d'un dictionnaire avec for vous donne les deux parties de chaque paire sous forme de tuple :

let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
    print("\(item) costs \(price)")
}

L'ordre d'itération n'est pas garanti. Exécutez la boucle deux fois et vous pourriez voir les entrées dans un ordre différent. Lorsque l'ordre est important, triez d'abord :

for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
    print("\(item): \(price)")
}

L'expression à l'intérieur de sorted(by:) est une closure : elle compare deux paires ($0 et $1) par leur propriété key. Les closures feront l'objet d'un chapitre dédié plus tard, pour l'instant considérez cela comme une recette pour trier un dictionnaire.

Deux autres propriétés utiles : .keys et .values vous donnent la collection des clés uniquement ou des valeurs uniquement.

challenge icon

Défi

Facile

Le dictionnaire scores associe des noms d'étudiants à des scores de type Int. Affichez :

  1. Chaque entrée sous la forme <name>: <score>, triée par nom par ordre alphabétique, une par ligne
  2. Sum: <total> pour l'ensemble des valeurs (utilisez .values et reduce)
  3. Above 70: <count>count est le nombre d'entrées ayant un score strictement supérieur à 70

Pour le dictionnaire par défaut, la sortie est :

Alice: 85
Bob: 60
Cara: 90
Dan: 72
Sum: 307
Above 70: 3

Aide-mémoire

Parcourez un dictionnaire avec for pour obtenir des tuples clé-valeur :

let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
    print("\(item) costs \(price)")
}

L'ordre d'itération n'est pas garanti. Triez d'abord lorsque l'ordre est important :

for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
    print("\(item): \(price)")
}

Accédez uniquement aux clés ou aux valeurs avec .keys et .values :

prices.keys    // collection de clés
prices.values  // collection de valeurs

Essayez vous-même

let scores: [String: Int] = [
    "Alice": 85, "Bob": 60, "Cara": 90, "Dan": 72
]

// TODO: afficher les entrées triées ; somme via reduce sur .values ; compter > 70
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux