Что представляет собой протокол Set в Swift?

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

Ответ

Set — это протокол в Swift, который описывает коллекцию уникальных элементов без гарантированного порядка. Он наследуется от Collection.

Ключевые требования:

  1. Уникальность: Каждый элемент может присутствовать в множестве только один раз.
  2. Hashable: Элементы должны соответствовать протоколу Hashable для эффективного хранения и поиска.
  3. Неупорядоченность: Порядок обхода элементов не определён и может меняться.

Основные операции (O(1) в среднем случае):

  • contains(_:) — проверка наличия элемента.
  • insert(_:) — добавление элемента (если его ещё нет).
  • remove(_:) — удаление элемента.
  • Теоретико-множественные операции: union, intersection, subtracting, symmetricDifference.

Пример использования:

// Объявление и инициализация
var visitedPages: Set<String> = ["home", "about", "contact"]

// Добавление (дубликат игнорируется)
visitedPages.insert("home") // Множество не изменится
visitedPages.insert("blog") // Добавится "blog"

// Быстрая проверка
if visitedPages.contains("about") {
    print("Страница уже посещена")
}

// Удаление дубликатов из массива
let arrayWithDuplicates = [1, 2, 2, 3, 1]
let uniqueElements = Set(arrayWithDuplicates) // Set([2, 1, 3])
let deduplicatedArray = Array(uniqueElements) // [2, 1, 3] (порядок может быть другим)

Почему Hashable? Конформность к Hashable позволяет Set использовать хеш-таблицу для хранения элементов, что обеспечивает константное время (в среднем) для операций вставки, удаления и поиска.