Wochenraster
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 36 von 56.
Es ist Zeit, den Kalender zu drucken. Erstellen Sie für jede Gewohnheit ein Raster mit sieben Zeichen, wobei X für erledigte Tage und . für die übrigen Tage steht.
// days = [1, 3, 5]
// ergibt: X.X.X..Nützliches Idiom: Baue das Gitter als ein Array von Zeichen auf und wandle es dann einmalig in einen String um.
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()days ist 1-basiert (Mo = 1), aber Swift-Arrays sind 0-basiert, subtrahieren Sie also 1 beim Zuweisen. Tage außerhalb des Bereichs würden zu einem Absturz führen, vertrauen Sie also dem Eingabeformat.
Aufgabe
MittelLies eine einzelne Eingabezeile ein: eine durch Kommas getrennte Liste von habit:day Einträgen. Erstelle das Dictionary wie zuvor und gib dann pro Gewohnheit (alphabetisch sortiert) eine Zeile in folgendem Format aus:
<habit> |<grid>| <count>wobei grid die sieben Zeichen lange X/. Zeichenfolge ist und count die Anzahl der eindeutigen erledigten Tage für diese Gewohnheit angibt.
Für die Eingabe read:1,read:3,read:5,workout:2,workout:4 lautet die Ausgabe:
read |X.X.X..| 3
workout |.X.X...| 2Spickzettel
Erstelle ein Raster mit 7 Zeichen mit X an erledigten Tagen und . an anderen Stellen (Tage sind 1-basiert):
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()Probier es selbst
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: Erstelle ein 7-Slot-Raster für jede Gewohnheit; drucke '<Name> |<Raster>| <Anzahl>'
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken