Array, Set или Dictionary: как выбрать коллекцию
Вопрос
Как вы выбираете между Array, Set и Dictionary? Приведите примеры из iOS-приложения.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Array: порядок и доступ по индексу, `contains` O(n)
Set: уникальность и проверка членства O(1), порядок не гарантирован
Dictionary: поиск по ключу O(1), ключ `Hashable`
Все три типы значений с copy-on-write
Пример: лента в Array, id прочитанных в Set, кеш по URL в Dictionary
Что могут спросить следом
- Как сохранить порядок и уникальность одновременно?
- Что будет со скоростью словаря, если
hash(into:)плохой?
Разбор
Смотрю на основную операцию. Если важен порядок и доступ по номеру, это Array: например, элементы ленты для таблицы. Поиск в массиве линейный, поэтому если я часто проверяю «есть ли элемент», беру Set: например, множество id уже показанных постов, чтобы не дублировать при пагинации. Если нужно найти значение по ключу, это Dictionary: кеш картинок по URL, модели по id. Все три это типы значений с copy-on-write, так что их можно спокойно передавать. Для порядка и уникальности одновременно есть OrderedSet в swift-collections, или массив плюс множество рядом. И помню, что порядок обхода Set и Dictionary не определён.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Коллекции и строки»
- Сложность append у Array в Swift
- ContiguousArray и мост с NSArray
- Подсчёт частот в словаре
- Порядок ключей в Dictionary
- Сложность операций коллекций Swift
- String и NSString: длина и индексы
- Как взять n-й символ строки в Swift
- Сколько символов в строке с флагом