Marquer comme terminé
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 34 sur 56.
La première fonctionnalité : traiter une liste d'actions « marquer cette habitude comme terminée ce jour-là » et produire un état final.
Chaque ligne d'entrée est une opération au format habit:day où day est compris entre 1 et 7. Si l'habitude n'existe pas encore, créez-la avec un tableau vide, puis ajoutez le jour. Si un jour est déjà enregistré pour cette habitude, ne l'enregistrez pas deux fois.
Vous vous appuierez sur le modèle d'indice par défaut (default-subscript) du chapitre sur les dictionnaires : habits[name, default: []].append(day) fonctionne que la clé existe ou non.
Défi
FacileLisez une seule ligne d'entrée : une liste d'entrées habit:day séparées par des virgules (par exemple read:1,read:3,workout:2). Après avoir appliqué chaque opération, affichez les habitudes par ordre alphabétique, une par ligne, au format :
<habit>: <days_sorted_ascending_joined_with_comma>Ignorez les paires habit:day en double.
Pour l'entrée read:1,read:3,workout:2,read:1,read:5,workout:4, la sortie est :
read: 1,3,5
workout: 2,4Aide-mémoire
Utilisez le motif d'indice par défaut (default-subscript) pour ajouter des éléments à un dictionnaire de tableaux, en créant la clé si elle n'existe pas :
var habits: [String: [Int]] = [:]
habits[name, default: []].append(day)
Pour éviter les doublons, vérifiez avant d'ajouter :
if !habits[name, default: []].contains(day) {
habits[name, default: []].append(day)
}
Essayez vous-même
var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
// TODO: pour chaque op, analyser nom:jour, ajouter le jour s'il n'y est pas déjà ;
// puis afficher les habitudes par ordre alphabétique avec les jours triés
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 mots