Ответ
Array<Element> (Массив)
- Характеристики: Упорядоченная коллекция, допускает дубликаты. Индексация начинается с 0.
- Преимущества: Константное время доступа по индексу — O(1). Эффективные операции в конце (append/popLast — амортизированное O(1)).
- Недостатки: Вставка или удаление элемента в середину требует сдвига всех последующих элементов — O(n).
Set<Element> (Множество)
- Характеристики: Неупорядоченная коллекция уникальных элементов. Тип
Elementдолжен соответствоватьHashable. - Преимущества: Константное в среднем время проверки наличия элемента (
contains), добавления и удаления — O(1). Гарантирует уникальность. - Недостатки: Нет понятия порядка или индекса. Нет гарантий на производительность в худшем случае (может деградировать до O(n)).
Dictionary<Key, Value> (Словарь)
- Характеристики: Неупорядоченная коллекция пар ключ-значение. Ключи уникальны и должны быть
Hashable. - Преимущества: Константное в среднем время доступа к значению по ключу — O(1). Идеален для ассоциативного поиска.
- Недостатки: Нет порядка (до Swift 4; в современных версиях порядок вставки сохраняется, но не стоит на него полагаться для логики). Избыточен, если нужен просто список.
Практические примеры выбора:
// 1. Задача: Отобразить ленту новостей в порядке публикации.
// Выбор: Array. Порядок важен.
let newsFeed: [NewsItem] = [item1, item2, item3] // item1 будет первым.
// 2. Задача: Хранить уникальные ID избранных товаров для быстрой проверки.
// Выбор: Set. Уникальность и быстрый поиск важны, порядок — нет.
var favoriteProductIDs: Set<String> = ["id123", "id456"]
if favoriteProductIDs.contains("id123") { // O(1)
print("Товар в избранном")
}
// 3. Задача: Кэшировать загруженные изображения по URL.
// Выбор: Dictionary. Быстрый доступ к данным (изображению) по ключу (URL).
var imageCache: [URL: UIImage] = [:]
if let cachedImage = imageCache[imageURL] { // O(1)
imageView.image = cachedImage
}