Ответ
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 для ассоциативного хранения данных.
Ответ 18+ 🔞
А, слушай, вот эта вся хуйня про коллекции в Swift — это, блядь, как три разных инструмента в гараже. Один — молоток, другой — шуруповёрт, третий — разводной ключ. И если ты будешь гвозди шуруповёртом забивать, то, блядь, и гвоздь сломаешь, и инструмент угробишь. Пиздец.
Вот смотри, есть три штуки, и каждая для своего дела.
1. Array (Массив, он же список, он же просто "пачка")
Это как, блядь, очередь в столовую. Все стоят по порядку, и ты знаешь, что Вася — пятый с начала. Порядок есть, и один и тот же мудак может прийти два раза — никто не заметит.
var продукты: [String] = ["Хлеб", "Молоко", "Хлеб"] // Два хлеба, и нихуя не случилось
продукты.append("Колбаса") // Сунул в конец очереди
let первыйВОчереди = продукты[0] // Спрашиваешь: "Кто первый?" — "Хлеб". Всё просто, O(1), блядь.
Но вот где пиздец: если ты захочешь впендюрить нового человека в начало этой очереди, то всем придётся, блядь, сдвинуться на шаг назад. Это O(n), то есть чем очередь длиннее, тем дольше все будут переобуваться. Вставка в середину — та же хуйня.
2. Set (Множество, он же "мешок с уникальным дерьмом")
А это уже не очередь. Это как, блядь, коробка с разноцветными шариками. Ты её трясёшь — порядок меняется, него хуя не понятно. Но главное правило: одинаковых шариков быть не может. Два красных? Нахуй! Один красный, и всё.
var уникальныеЧисла: Set<Int> = [1, 2, 3, 1] // Попробовал сунуть две единицы
print(уникальныеЧисла) // [2, 3, 1] или [1, 3, 2] — порядок ёбнут, дубликата нет!
if уникальныеЧисла.contains(2) { // И вот тут магия, О(1) в среднем!
print("Нашёл, сука!") // Ищет не перебирая всё, а по хэшу, как умный.
}
Идеален, когда тебе надо быстро ответить на вопрос: "А этот пидор уже в списке?" или "Какие уникальные элементы есть?".
3. Dictionary (Словарь, он же "паспортный стол")
Это, блядь, самый полезный инструмент. У тебя есть ключ (например, имя) и значение (например, оценка за тест). Порядок — похуй. Главное, чтобы ключи не повторялись. Не может быть двух записей на "Васю Пупкина", иначе пиздец.
var оценки: [String: Int] = ["Анна": 5, "Борис": 2]
оценки["Владимир"] = 4 // Добавил новую пару
let оценкаБориса = оценки["Борис"] // Спросил по ключу — мгновенно получил "2". O(1), ёпта!
Словарь — это когда тебе нужно по какому-то известному слову (ключу) моментально доебаться до связанного с ним значения. Телефонная книга, база данных в миниатюре.
Короче, сводка для тех, кто в танке
| Коллекция | Порядок | Повторы? | Зачем нужна? |
|---|---|---|---|
| Array | Да, свято блюдёт | Да, хоть трижды | Когда важен порядок и индекс. Очередь, список. |
| Set | Нет, ёбнут | Нет, нахуй | Когда важна уникальность и быстрый поиск "есть ли?". |
| Dictionary | Нет, похуй | Ключи — нет | Когда нужно хранить пары "ключ → значение" и быстро искать по ключу. |
Итог, блядь: Не будь мудаком. Если тебе нужен просто список по порядку — бери Array. Если нужно проверить, был ли пользователь в системе — Set. Если нужно хранить данные по id или имени — Dictionary. Выбирай инструмент по задаче, а не потому что "массивом привычнее", а то получишь O(n) там, где могло быть O(1), и потом будешь ебаться с оптимизацией, как дурак.