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.
Défi
MoyenLisez une seule ligne d'entrée : une liste de mots séparés par des virgules.
Affichez, dans cet ordre :
- Une ligne par longueur de mot apparaissant dans l'entrée, triée de la plus courte à la plus longue, au format
<length>: <count>oùcountest le nombre de mots de cette longueur qui sont apparus Most common length: <n>oùnest 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)
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
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots3Dictionnaires
Déclarer des dictionnairesRecherche optionnelleMettre à jour des dictionnairesParcourir des dictionnairesGrouper des valeursRécapitulatif - Inventaire6Fonctions d'ordre supérieur, partie 2
compactMapflatMapsorted(by:)Construction de pipelinesRécapitulatif - Tableau de classement