Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Die 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:

  1. Den Fragetext
  2. correct oder wrong unter 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/2

Probier 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Swift-Playground