Log-Aggregator
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 55 von 56.
Aufgabe
MittelSie verarbeiten Zugriffsprotokolle. Lesen Sie eine einzelne Eingabezeile: eine durch Kommas getrennte Liste von level:user:bytes Einträgen.
Einige Einträge sind fehlerhaft und sollten übersprungen werden: jeder Eintrag, dessen bytes nicht als Ganzzahl interpretiert werden können oder dessen level nicht einer der Werte INFO, WARN, ERROR (Groß-/Kleinschreibung beachten) ist.
Geben Sie in dieser Reihenfolge Folgendes aus:
- Eine Zeile pro Level, das mindestens einmal vorkam, sortiert in dieser festen Reihenfolge:
ERROR,WARN,INFO. Jede Zeile hat das Format<level>: <count> (<bytes>), wobeicountdie Anzahl der gültigen Einträge auf diesem Level undbytesdie Summe ihrer Bytes ist. Top user: <name> (<bytes>): der Benutzer mit den meisten Gesamt-Bytes über alle gültigen Einträge hinweg. Lösen Sie Gleichstände alphabetisch nach dem Namen auf.Skipped: <n>mit der Anzahl der fehlerhaften Einträge.
Für die Eingabe INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75 lautet die Ausgabe:
ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2Probier es selbst
let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]
// TODO: Jede Eingabe parsen, ungültige verwerfen, pro Ebene + pro Benutzer akkumulieren;
// Ebenen in fester Reihenfolge ausgeben (nur wenn vorhanden), Top-Benutzer, dann Anzahl der übersprungenen Einträge
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