В чем разница между основными типами коллекций в Swift: Array, Set и Dictionary?

«В чем разница между основными типами коллекций в Swift: Array, Set и Dictionary?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Swift предоставляет три фундаментальных типа коллекций, каждый оптимизирован для своих задач.

1. Array (Массив)

  • Упорядоченная коллекция элементов.
  • Доступ по целочисленному индексу (array[0]).
  • Допускает дубликаты значений.
  • Порядок вставки сохраняется.
var fruits: [String] = ["Apple", "Banana", "Apple"] // Дубликаты разрешены
fruits.append("Orange") // Добавление в конец
let firstFruit = fruits[0] // Доступ по индексу: "Apple"

Сложность операций:

  • Доступ по индексу – O(1).
  • Поиск элемента – O(n).
  • Вставка в начало/середину – O(n).

2. Set (Множество)

  • Неупорядоченная коллекция уникальных элементов.
  • Гарантирует, что каждый элемент присутствует только один раз.
  • Очень быстрый поиск (O(1) в среднем), так как основан на хэш-таблице.
  • Реализует математические операции (объединение, пересечение).
var uniqueNumbers: Set<Int> = [1, 2, 3, 1] // Фактически [1, 2, 3]
uniqueNumbers.insert(4)
if uniqueNumbers.contains(2) { // Быстрый поиск
    print("Найдено!")
}

3. Dictionary (Словарь)

  • Неупорядоченная коллекция пар ключ-значение.
  • Ключи должны быть уникальными и хэшируемыми (Hashable).
  • Оптимизирован для поиска значения по ключу (O(1) в среднем).
var scores: [String: Int] = ["Alice": 10, "Bob": 15]
scores["Charlie"] = 12 // Добавление
let bobScore = scores["Bob"] // 15 (быстрый доступ по ключу)

Сводная таблица

Коллекция Порядок Уникальность Ключевая операция
Array Сохраняется Дубликаты разрешены Доступ по индексу
Set Не гарантирован Все элементы уникальны Проверка принадлежности (contains)
Dictionary Не гарантирован Ключи уникальны Доступ по ключу

Почему это важно? Правильный выбор коллекции напрямую влияет на производительность и читаемость кода. Используйте Array для упорядоченных списков, Set для проверки уникальности и быстрого поиска, Dictionary для ассоциативного хранения данных.