Ответ
Производительность Array, Set и Dictionary в Swift зависит от конкретной операции. Основные отличия связаны с их внутренней структурой данных.
Сравнение по операциям (Big O нотация):
| Операция | Array | Set | Dictionary |
|---|---|---|---|
| Поиск элемента | O(n) (линейный поиск) | O(1) в среднем (хеш-таблица) | O(1) в среднем (поиск по ключу) |
| Вставка в конец | O(1) в среднем | - | - |
| Вставка в середину | O(n) | O(1) в среднем | O(1) в среднем |
| Удаление | O(n) (если не с конца) | O(1) в среднем | O(1) в среднем |
Примеры:
// Поиск
let array = [1, 2, 3, 4]
array.contains(3) // O(n) - проходит по всем элементам
let set: Set = [1, 2, 3, 4]
set.contains(3) // O(1) - использует хеш для прямого доступа
let dict = [1: "a", 2: "b"]
dict[1] // O(1) - поиск значения по ключу
Рекомендации по выбору:
Array: Когда важен порядок элементов или частый доступ по индексу.Set: Когда нужна гарантия уникальности элементов и быстрый поиск/проверка на вхождение.Dictionary: Когда данные логически организованы как пары «ключ-значение» и нужен быстрый доступ по ключу.