Линейная коллекция элементов с индексами:
var numbers = [1, 2, 3]
numbers.append(4) // [1, 2, 3, 4]
let first = numbers[0] // 1
Уникальные неупорядоченные элементы:
var uniqueNumbers: Set = [1, 2, 3, 3] // [1, 2, 3]
uniqueNumbers.insert(4) // [1, 2, 3, 4]
Пары ключ-значение:
var userInfo = ["name": "John", "age": 30]
userInfo["email"] = "john@example.com"
Последовательность символов:
let greeting = "Hello"
let count = greeting.count // 5
Реализация стека на массиве:
struct Stack<Element> {
private var elements = [Element]()
mutating func push(_ element: Element) {
elements.append(element)
}
mutating func pop() -> Element? {
return elements.popLast()
}
}
Реализация очереди:
struct Queue<Element> {
private var elements = [Element]()
mutating func enqueue(_ element: Element) {
elements.append(element)
}
mutating func dequeue() -> Element? {
return elements.isEmpty ? nil : elements.removeFirst()
}
}
Пример односвязного списка:
class Node<T> {
var value: T
var next: Node?
init(value: T) { self.value = value }
}
Множество с подсчетом элементов:
let countedSet = NSCountedSet()
countedSet.add("apple")
countedSet.add("apple")
countedSet.count(for: "apple") // 2
Упорядоченное множество:
let ordered = NSOrderedSet(array: [3, 1, 2, 1])
ordered.array // [3, 1, 2]
Структура | Используйте когда... | Средняя сложность доступа |
---|---|---|
Array | Нужен порядок или частый доступ по индексу | O(1) |
Set | Важна уникальность и быстрая проверка наличия | O(1) |
Dictionary | Нужен доступ по уникальному ключу | O(1) |
Stack | Нужен LIFO принцип | O(1) для push/pop |
Queue | Нужен FIFO принцип | O(n) для dequeue |
Swift предлагает богатый набор структур данных как из стандартной библиотеки, так и из Foundation. Выбор зависит от конкретной задачи: нужен ли порядок элементов, важна ли уникальность, требуются ли частые вставки/удаления. Для сложных сценариев можно создавать собственные структуры на основе базовых.