В чём ключевые отличия Set от Array в Swift и когда что использовать?

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

Ответ

Set и Array — принципиально разные коллекции в Swift:

Характеристика Set Array
Уникальность Гарантирует уникальность элементов Допускает дубликаты
Порядок Не гарантирован Сохраняется
Поиск (contains) O(1) в среднем O(n)
Индексация Нет целочисленных индексов Есть целочисленные индексы
Тип элементов Должны быть Hashable Любые

Примеры:

// Array — с дубликатами и порядком
let array: [Int] = [1, 2, 3, 2, 1] // [1, 2, 3, 2, 1]
print(array[2]) // 3

// Set — только уникальные, порядок случаен
let set: Set<Int> = [1, 2, 3, 2, 1] // [2, 3, 1] (порядок может быть другим)
print(set.contains(3)) // true (быстро)

Когда использовать Set:

  1. Нужна гарантия уникальности элементов
  2. Частые проверки наличия элемента
  3. Операции с множествами (объединение, пересечение)
    let admins: Set<String> = ["alice", "bob"]
    let users: Set<String> = ["bob", "charlie"]
    let common = admins.intersection(users) // ["bob"]

Когда использовать Array:

  1. Важен порядок элементов
  2. Нужны дубликаты
  3. Частый доступ по индексу
  4. Последовательная обработка
    let sortedScores = [95, 87, 92].sorted() // [87, 92, 95]
    let first = sortedScores[0] // 87

Производительность:

  • Добавление: Set — O(1), Array — O(1) в конце, O(n) в начале
  • Удаление: Set — O(1), Array — O(n)
  • Итерация: O(n) для обеих