Отметить выполнение
Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 34 из 56.
Первая функция: обработать список действий «отметить эту привычку как выполненную в этот день» и сформировать конечное состояние.
Каждая входная строка представляет собой одну операцию в формате habit:day, где day находится в диапазоне от 1 до 7. Если привычка еще не существует, создайте её с пустым массивом, затем добавьте день. Если день для этой привычки уже записан, не записывайте его дважды.
Вы будете опираться на паттерн обращения по индексу со значением по умолчанию (default-subscript) из главы о словарях: habits[name, default: []].append(day) работает независимо от того, существует ключ или нет.
Задание
ЛегкоПрочитайте одну строку ввода: список записей habit:day, разделенных запятыми (например, read:1,read:3,workout:2). После применения каждой операции выведите привычки в алфавитном порядке, по одной на строку, в формате:
<habit>: <days_sorted_ascending_joined_with_comma>Пропускайте дублирующиеся пары habit:day.
Для входных данных read:1,read:3,workout:2,read:1,read:5,workout:4 вывод будет следующим:
read: 1,3,5
workout: 2,4Шпаргалка
Используйте паттерн обращения по индексу со значением по умолчанию (default-subscript), чтобы добавить элемент в словарь массивов, создавая ключ, если он не существует:
var habits: [String: [Int]] = [:]
habits[name, default: []].append(day)
Чтобы избежать дубликатов, выполните проверку перед добавлением:
if !habits[name, default: []].contains(day) {
habits[name, default: []].append(day)
}
Попробуйте сами
var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
// TODO: для каждой op распарсить name:day, добавить day, если его еще нет;
// затем вывести habits в алфавитном порядке с отсортированными днями
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря