Урок №5 - Словари. Полностью переработан.
Здесь та же история, что и с массивами. Была карточка со ссылкой, базовый синтаксис и "дальше сам" по карточке. Теперь - это полноценный урок на 4.5-6 часов.
Три раздела с нуля: создание и доступ, изменение, итерация и трансформации. Каждый с визуализациями, примерами и нюансами, которые в карточке, увы, просто не помещались.
Что появилось:
1. Массив vs Словарь - таблица сравнения прямо в начале. Когда по номеру, когда по ключу, где O(1), где O(n). Чтобы не путать и сразу понимать, какую структуру выбрать.
2. default: и его отличие от ?? - то, что редко объясняют. dict[key, default: 0] += 1 работает, а dict[key] ?? 0 += 1 - нет. Почему? Небольшое, но крайне действенное знание.
3. Нюанс с Optional значениями - dict[key] = nil удаляет ключ, даже если тип значения String?. Хочешь сохранить ключ с nil - нужен updateValue. Редкий кейс, но когда наступишь - дебажить будешь долго...
4. mapValues vs map - главная путаница со словарями. mapValues возвращает словарь, map возвращает массив кортежей. Разложил с примерами, чтобы не путать в будущем и запомнить.
5. Dictionary(grouping:by:) - группировка массива в словарь по признаку. Разделить оценки на "сдал / не сдал", сгруппировать имена по первой букве - это одна стрчока.
6. Проверь себя после каждого раздела - вопросы с кодом и скрытыми ответами. "Что вернёт updateValue для несуществующего ключа?", "Останется ли ключ после dict[key] = nil?". Как всегда проверяем теорию практикой!
7. Частые ошибки - 6 штук. Забытый Optional при доступе, force unwrap по несуществующему ключу, ожидание порядка в словаре, путаница mapValues и map.
8. 5 домашних заданий - от easy до medium+. Телефонная книга, переводчик, счётчик голосов с default:, прайс-лист с mapValues и filter, объединение классов через merge.
9. График повторения - через 1, 3 и 10 дней. На десятый день - метод Фейнмана: объясни вслух, почему dict[key] возвращает Optional, а array[index] нет. Вроде-бы мелочь, а знания держит в памяти!
Словари - это та тема, которую новички "вроде знают". А потом на собесе не могут ответить: "Чем отличается доступ в словаре от массива? Что такое Hashable? Когда что выбрать?". И вот тут начинается....
После массивов уже пойдет более легче, и да, знания про Hashtable и методы пробирования здесь не нужны, все-таки приложения учимся писать и понимать почему пишем так или иначе.
А подготовка к собесам и все знания для него, это самособой вовремя итогового написания приложения!
Если старую карточку уже прошёл - возвращаться не обязательно. Но если хочешь закрепить, пятое задание с merge и средним баллом - хорошая проверка.