Ответ вслух Junior Коллекции и строки спрашивают часто обновлено

Array, Set или Dictionary: как выбрать коллекцию

Вопрос

Как вы выбираете между Array, Set и Dictionary? Приведите примеры из iOS-приложения.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Смотрю на основную операцию. Если важен порядок и доступ по номеру, это Array: например, элементы ленты для таблицы.

Что должно прозвучать в ответе

  • 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 ошибок.