Collections.
Распространенные реализации
В Swift выделяют три основные коллекции:
- Array (массив) — это коллекция упорядоченных элементов по индексам (Ordered random-access collection)
- Set (множество) — это неупорядоченная коллекция уникальных элементов (Unordered collection of unique elements)
- Dictionary (словарь) — это коллекция пар ключ-значение (Collection of pairs key-value)
Каждая из коллекций имеет свои особенности.
Понимание отличий и принципов работы помогает с выбором необходимой коллекции при решении определенной задачи, реализации бизнес-логики или даже для повышении эффективности работы вашего кода.
В каких случаях применяются
Если вам важен порядок и не смущает наличие дубликатов, то очевидным выбором является Array (Массив), большинство реализаций приходится именно на эту коллекцию.
А если порядок не нужен или наличие одинаковых данных начинает доставлять дискомфортные ощущения? Конечно же, мы начинаем рассматривать Set (Множества). Реализация primary key, названия и любые другие значения, которым необходимо существовать в единственном числе, чтобы не вызвать краш приложения или нарушение его работы.
Наконец, Dictionary (Словари), с конкретным ключом и значением для него. Если ваше ТЗ предполагает получение данных с сервера, то без Словаря не обойтись.
Как работают внутри
Array.
Это динамический массив. Его элементы хранятся в блоке памяти, куда и записываются данные по порядку, для доступа к этим данным мы используем индексы ячеек.
Существует огромное количество полезных методов, рассмотрим пару примеров:
// Добавляем
massive.append(111) // [12, 34, 55, 44, 43, 111]
massive.insert(0, at: 3) // [12, 34, 55, 0, 44, 43, 111]
// Удаляем
massive.remove(at: 2) // [12, 34, 0, 44, 43, 111]
massive.removeLast() // [12, 34, 0, 44, 43]
Set.
Это неупорядоченная коллекция уникальных элементов. Внутренняя структура реализована как хэш-таблица. Каждый элемент имеет уникальное хэш-значение, что позволяет быстро выполнять операции добавления и поиска.
Суть какая, в памяти выглядит как массив, только вместо индекса хэш значения.
Например,
если у числа 12 хэш = 222444,
у числа 11(1) хэш = 111555,
*у всех дубликатов числа 11 хэш одинаковый.
Создаются ячейки, адрес которых и есть хэш числа. Число 12 попадает в ячейку со своим хешем, первое число 11 – в свою ячейку, а дубликаты числа 11 игнорируются, так как хеш этого числа уже есть в таблице памяти.
Dictionary.
Это коллекция пар ключ-значение (Collection of pairs key-value).
Как и Set, Dictionary реализован через хэш-таблицу. Пары «ключ-значение» хранятся в соответствующих ячейках на основе хэша ключа.
В этой части мы рассмотрели самые простые коллекции, пробуйте примеры со скринов через Playground или прям во ViewDidLoad вашего проекта.
Во второй части мы рассмотрим более продвинутый уровень.