Назовите типы для работы с коллекциями, которые есть в Swift.ios-36

Swift предоставляет три основных типа коллекций, каждый из которых имеет свои особенности и варианты использования:

1. Array - упорядоченная коллекция

Характеристики:

  • Сохраняет порядок элементов
  • Доступ по индексу (начиная с 0)
  • Может содержать дубликаты
  • Элементы одного типа

Примеры:

// Создание
var numbers: [Int] = [1, 2, 3]
var names = ["Anna", "Alex"] // тип выводится как [String]

// Доступ
let firstNumber = numbers[0] // 1

// Модификация
numbers.append(4)
numbers.insert(0, at: 0)
numbers.remove(at: 1)

Особенности:

  • Высокая производительность для операций в конце (O(1))
  • Средняя производительность для вставки/удаления в середине (O(n))

2. Set - неупорядоченная уникальная коллекция

Характеристики:

  • Не сохраняет порядок элементов
  • Все элементы уникальны
  • Быстрый поиск элемента
  • Элементы должны быть Hashable

Примеры:

// Создание
var letters = Set<Character>()
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

// Операции
favoriteGenres.insert("Jazz")
favoriteGenres.remove("Rock")

// Проверка принадлежности
if favoriteGenres.contains("Funk") {
    print("Есть!")
}

Особенности:

  • Крайне быстрый поиск (O(1))
  • Поддержка математических операций:
    let union = setA.union(setB) // объединение
    let intersection = setA.intersection(setB) // пересечение
    

3. Dictionary - коллекция пар "ключ-значение"

Характеристики:

  • Неупорядоченная коллекция
  • Ключи должны быть Hashable
  • Быстрый доступ по ключу
  • Каждый ключ уникален

Примеры:

// Создание
var namesOfIntegers: [Int: String] = [:]
var airports = ["YYZ": "Toronto", "DUB": "Dublin"]

// Доступ и модификация
airports["LHR"] = "London" // добавление
airports["LHR"] = "London Heathrow" // изменение
if let removedValue = airports.removeValue(forKey: "DUB") {
    print("Удален \(removedValue)")
}

Особенности:

  • Быстрый доступ к значениям по ключу (O(1))
  • Удобен для хранения ассоциативных данных

Специальные виды коллекций

1. Range

let closedRange = 1...5 // включая 5
let halfOpenRange = 1..<5 // не включая 5

2. Slice

let array = [1, 2, 3, 4, 5]
let slice = array[1..<3] // [2, 3]

3. NSCountedSet

  • Set с подсчетом количества элементов
let countedSet = NSCountedSet()
countedSet.add("Apple")
countedSet.add("Apple")
countedSet.count(for: "Apple") // 2

Протоколы коллекций

Swift коллекции построены на иерархии протоколов:

  1. Sequence - базовый протокол для итерируемых типов
  2. Collection - наследует Sequence, добавляет индексы и доступ по индексу
  3. BidirectionalCollection - добавляет возможность итерирования в обратном порядке
  4. RandomAccessCollection - быстрый произвольный доступ

Производительность операций

КоллекцияДоступПоискВставкаУдаление
Array O(1) O(n) O(n) O(n)
Set - O(1) O(1) O(1)
Dictionary O(1) O(1) O(1) O(1)

Примеры выбора коллекции

  1. Нужен порядок? → Array
  2. Уникальность элементов? → Set
  3. Ассоциативное хранение? → Dictionary
  4. Частый поиск? → Set или Dictionary

Резюмируем

Основные типы коллекций в Swift:

  1. Array - упорядоченные списки
  2. Set - неупорядоченные уникальные элементы
  3. Dictionary - пары ключ-значение

Дополнительные типы:

  • Range, Slice, NSCountedSet

Выбор коллекции зависит от:

  • Необходимости сохранять порядок
  • Требований к уникальности элементов
  • Частоты операций поиска/вставки
  • Необходимости ассоциативного доступа