Aggregatore di log
Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 55 di 56.
Sfida
MedioStai elaborando log di accesso. Leggi una singola riga di input: un elenco separato da virgole di voci level:user:bytes.
Alcune voci non sono valide e vanno ignorate: qualsiasi voce il cui bytes non può essere analizzato come intero, oppure il cui level non è uno tra INFO, WARN, ERROR (con distinzione tra maiuscole e minuscole).
Stampa, in questo ordine:
- Una riga per ogni livello apparso almeno una volta, ordinati in questo ordine fisso:
ERROR,WARN,INFO. Ogni riga è<level>: <count> (<bytes>), dovecountè il numero di voci valide a quel livello ebytesè la somma dei loro byte. Top user: <name> (<bytes>): l'utente con il maggior numero totale di byte in tutte le voci valide. In caso di parità, ordina i nomi alfabeticamente.Skipped: <n>con il numero di voci malformate.
Per l'input INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75, l'output è:
ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2Provalo tu
let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]
// TODO: analizza ogni voce, scarta quelle non valide, accumula i conteggi per livello e per utente;
// stampa i livelli in ordine fisso (solo se presenti), l'utente con il conteggio più alto, poi il conteggio Skipped
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Conteggio e indiciMaiuscole, minuscole e rimozione degli spaziRicerca nelle stringheSuddivisione e unioneSostituzione di sottostringheRiepilogo - Verifica del nome utente4Insiemi
Creare insiemiUnione e intersezioneDifferenza e differenza simmetricaSottoinsieme e sovrainsiemeRiepilogo - Filtro per tag7Progetto - Tracciatore di abitudini
Panoramica del progettoSegna come completato10Progetto - Motore di quiz
Panoramica del progettoPorre domande2Intervalli e passi
Intervalli chiusi e semiapertiPassoMetodi degli intervalliIntervalli in switchRiepilogo - Griglia del calendario5Funzioni di ordine superiore Parte 1
MapFilterReduceConcatenare map, filter e reduceRiepilogo - Statistiche sulle paroleEsercitati da solo: Playground Swift