Агрегатор логов
Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 55 из 56.
Задание
СреднеВы обрабатываете журналы доступа. Прочитайте одну строку ввода: список записей level:user:bytes, разделенных запятыми.
Некоторые записи некорректны и должны быть пропущены: любая запись, в которой bytes не могут быть преобразованы в целое число, или чей level не является одним из INFO, WARN, ERROR (с учетом регистра).
Выведите в следующем порядке:
- По одной строке для каждого уровня (level), который встретился хотя бы один раз, отсортированных в фиксированном порядке:
ERROR,WARN,INFO. Каждая строка имеет формат<level>: <count> (<bytes>), гдеcount— это количество валидных записей на этом уровне, аbytes— сумма их байтов. Top user: <name> (<bytes>): пользователь с наибольшим общим количеством байтов во всех валидных записях. При равенстве байтов сортируйте по имени в алфавитном порядке.Skipped: <n>с количеством некорректных записей.
Для входных данных INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75 выводом будет:
ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2Попробуйте сами
let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]
// TODO: разобрать каждую запись, отбросить некорректные, накопить данные по уровням и пользователям;
// вывести уровни в фиксированном порядке (только если они встретились), топового пользователя, затем количество пропущенных (Skipped)
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря