Nach Kategorie filtern
Teil des Abschnitts Logik & Ablauf der Swift-Journey von Coddy. Lektion 52 von 56.
Das nächste Feature: Lassen Sie den Spieler eine Kategorie auswählen und stellen Sie nur Fragen aus dieser Kategorie.
Nutzen Sie filter auf dem Fragenkatalog mit der Kategorie als Prädikat und iterieren Sie dann über das Ergebnis. Das filter-Ergebnis ist ein brandneues Array, der ursprüngliche Katalog bleibt unverändert.
let chosen = questions.filter { $0.0 == category }
for (_, text, _) in chosen {
print(text)
// ...
}Wenn chosen leer ist, gib einen freundlichen Ersatztext aus, anstatt die Schleife auszuführen. Das verhindert, dass das Programm untätig bleibt, wenn der Benutzer eine Kategorie eingibt, die nicht existiert.
Aufgabe
MittelDie erweiterte Fragen-Datenbank enthält sechs Einträge in drei Kategorien: math, geo, science.
Lies die gewählte Kategorie aus der ersten Zeile der Eingabe, und lies dann pro verbleibender Zeile jeweils eine Antwort des Spielers in der entsprechenden Reihenfolge ein. Filtere die Datenbank nach Kategorie (Groß-/Kleinschreibung ignorieren) und stelle dann jede Frage nacheinander.
Gib für jede Frage der gewählten Kategorie Folgendes aus:
- Den Fragetext
correctoderwrongunter Verwendung der kulanten Bewertung aus der vorherigen Lektion
Beende die Ausgabe mit Score: <n>/<m>, wobei m die Anzahl der Fragen in der Kategorie ist. Wenn die Kategorie unbekannt ist, gib Unknown category: <name> und sonst nichts aus.
Für die Eingabe math in Zeile 1 und 4 / 3.14 in den Zeilen 2-3 lautet die Ausgabe:
2 + 2?
correct
Value of pi to 2 decimals?
correct
Score: 2/2Probier es selbst
let questions: [(String, String, String)] = [
("math", "2 + 2?", "4"),
("math", "Value of pi to 2 decimals?", "3.14"),
("geo", "Capital of France?", "Paris"),
("geo", "Largest ocean?", "Pacific"),
("science", "Color of grass?", "green"),
("science", "H2O is?", "water")
]
let category = readLine()!
// TODO: Nach Kategorie filtern (Groß-/Kleinschreibung ignorieren); falls leer, Unknown ... ausgeben;
// andernfalls iterieren, abfragen, kulant bewerten, Score: n/m ausgeben
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimSuchen in StringsAufteilen und ZusammenfügenTeilstrings ersetzenRückblick – Benutzernamen prüfen4Mengen
Mengen erstellenVereinigung und SchnittmengeSubtraktion und symmetrische DifferenzTeilmenge und ObermengeWiederholung – Tag-Filter7Projekt – Gewohnheitstracker
ProjektübersichtAls erledigt markieren10Projekt – Quiz-Engine
ProjektübersichtFragen stellen2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteBereichsmethodenBereiche in SwitchRückblick – Kalender-Raster5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerketten von Map, Filter und ReduceRückblick – WortstatistikÜbe selbstständig: Swift-Playground