Ответ
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:
- Нужна гарантия уникальности элементов
- Частые проверки наличия элемента
- Операции с множествами (объединение, пересечение)
let admins: Set<String> = ["alice", "bob"] let users: Set<String> = ["bob", "charlie"] let common = admins.intersection(users) // ["bob"]
Когда использовать Array:
- Важен порядок элементов
- Нужны дубликаты
- Частый доступ по индексу
- Последовательная обработка
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) для обеих