Menu
Coddy logo textTech

Grouper des valeurs

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

Le motif default-subscript est le fondement de deux formes courantes.

Compteur de fréquence : compte combien de fois chaque clé apparaît.

let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
    counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]

Bucketing : collecter des valeurs sous une clé dérivée :

let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
    byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]

La valeur par défaut pour le cas de regroupement (bucketing) est un tableau vide. La valeur default: est utilisée uniquement lorsque la clé est manquante, puis le côté droit modifie l'entrée en place.

challenge icon

Défi

Moyen

Lisez une seule ligne d'entrée : une liste de mots séparés par des virgules.

Affichez, dans cet ordre :

  1. Une ligne par longueur de mot apparaissant dans l'entrée, triée de la plus courte à la plus longue, au format <length>: <count>count est le nombre de mots de cette longueur qui sont apparus
  2. Most common length: <n>n est la longueur avec le décompte le plus élevé. En cas d'égalité, choisissez la longueur la plus courte.

Pour l'entrée hi,hello,yo,hey,bonjour,bye, la sortie est :

2: 2
3: 2
5: 1
7: 1
Most common length: 2

(Les longueurs 2 et 3 apparaissent toutes deux deux fois. L'égalité est tranchée par la plus courte, donc 2 gagne.)

Aide-mémoire

Compteur de fréquence – compte les occurrences de chaque clé en utilisant default: 0 :

var counts: [String: Int] = [:]
for letter in letters {
    counts[letter, default: 0] += 1
}

Regroupement – regroupe les valeurs sous une clé dérivée en utilisant default: [] :

var byLength: [Int: [String]] = [:]
for w in words {
    byLength[w.count, default: []].append(w)
}

La valeur default: n'est utilisée que lorsque la clé est absente ; le résultat est ensuite modifié sur place.

Essayez vous-même

let words = readLine()!.components(separatedBy: ",")

// TODO: compter les mots par longueur ; afficher trié ; afficher le plus fréquent (en cas d'égalité : le plus court)
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