Mettre à jour des dictionnaires
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 14 sur 56.
Vous écrivez dans un dictionnaire de la même manière que vous y lisez : avec l'indice.
var prices: [String: Int] = ["apple": 1]
prices["bread"] = 3 // ajoute la clé
prices["apple"] = 2 // met à jour une clé existante
prices["apple"] = nil // supprime la cléDeux méthodes nommées font la même chose de manière plus explicite :
prices.updateValue(5, forKey: "milk") // renvoie l'ancienne valeur, ou nil
prices.removeValue(forKey: "bread") // renvoie la valeur supprimée, ou nilLes méthodes nommées renvoient la valeur précédente, ce qui est utile lorsque vous avez besoin de savoir si la clé existait déjà.
Le pattern d'indice par défaut de la leçon précédente s'enchaîne parfaitement avec la mutation ; c'est ainsi que vous construisez un compteur sans écrire de if :
var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]Défi
MoyenLisez une seule ligne d'entrée : une liste d'opérations séparées par des virgules sur un dictionnaire de départ. Chaque opération est l'une des suivantes :
set:<key>:<value>ajoute ou met à jour (la valeur est un entier)add:<key>:<value>ajoute la valeur à celle existante (utilisez le modèle default-subscript)del:<key>supprime la clé
Après avoir appliqué chaque opération dans l'ordre à un [String: Int] initialement vide, affichez les clés par ordre alphabétique, une par ligne, au format <key>=<value>.
Pour l'entrée set:a:5,add:a:3,set:b:1,del:b,add:c:2, la sortie est :
a=8
c=2Aide-mémoire
Modifiez un dictionnaire en utilisant l'indice ou des méthodes nommées :
prices["bread"] = 3 // ajouter
prices["apple"] = 2 // mettre à jour
prices["apple"] = nil // supprimer
prices.updateValue(5, forKey: "milk") // retourne l'ancienne valeur ou nil
prices.removeValue(forKey: "bread") // retourne la valeur supprimée ou nilUtilisez le motif d'indice par défaut pour muter sans if :
var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]Essayez vous-même
let ops = readLine()!.components(separatedBy: ",")
var dict: [String: Int] = [:]
// TODO: analyser chaque op et appliquer set/add/del ; afficher les clés triées avec leurs valeurs
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