Log-Aggregator
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy. Lektion 55 von 56.
Aufgabe
MittelDu verarbeitest Zugriffsprotokolle. Lies eine einzelne Eingabezeile ein: 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 geparst werden kann oder dessen level nicht eines von INFO, WARN, ERROR ist (Groß-/Kleinschreibung wird beachtet).
Gib Folgendes in dieser Reihenfolge 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 für dieses Level undbytesdie Summe ihrer Bytes ist. Top user: <name> (<bytes>): der Benutzer mit den meisten Bytes insgesamt über alle gültigen Einträge hinweg. Bei Gleichstand werden die Namen alphabetisch sortiert.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 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 markieren2Bereiche & 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