Grille hebdomadaire
Fait partie de la section Logique et Flux du Journey Swift de Coddy. Leçon 36 sur 56.
Il est temps d'afficher le calendrier. Pour chaque habitude, générez une grille de sept caractères avec un X pour les jours effectués et un . ailleurs.
// days = [1, 3, 5]
// rendu : X.X.X..Astuce utile : construisez la grille sous forme d'un tableau de caractères, puis transformez-le en String une seule fois.
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()days est indexé à partir de 1 (Mon = 1) mais les tableaux Swift sont indexés à partir de 0, donc soustrayez 1 lors de l'assignation. Des jours hors plage provoqueraient un plantage, donc faites confiance au format d'entrée.
Défi
MoyenLisez une seule ligne d'entrée : une liste d'entrées habit:day séparées par des virgules. Construisez le dictionnaire comme précédemment, puis affichez une ligne par habitude (triée par ordre alphabétique) au format :
<habit> |<grid>| <count>où grid est la chaîne de sept caractères X/. et count est le nombre de jours uniques effectués pour cette habitude.
Pour l'entrée read:1,read:3,read:5,workout:2,workout:4, la sortie est :
read |X.X.X..| 3
workout |.X.X...| 2Essayez vous-même
var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
for op in ops {
let parts = op.components(separatedBy: ":")
let day = Int(parts[1])!
if !(habits[parts[0], default: []].contains(day)) {
habits[parts[0], default: []].append(day)
}
}
// TODO: construire une grille de 7 emplacements pour chaque habitude ; afficher '<nom> |<grille>| <compte>'
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 motsEntraînez-vous par vous-même : Playground Swift