Часто в повседневной работе нам кажется, что
массивы,
словари и
множества покрывают все задачи, но есть инструменты, которые могут сделать ваш код эффективнее, чище и надежнее. Сегодня разберем несколько структур из библиотеки
swift-collections, которые решат проблемы, о которых вы могли не подозревать.
Deque:
Deque - это оптимизированная версия массива, которая позволяет добавлять и удалять элементы с начала и конца за O(1). В то время как Array тратит O(n) на вставку в начало.
Пример:
Например, код из фоторедактора с функцией отмены последних действий.
import Collections
final class ActionHistory
{
private var history: Deque = []
private let capacity: Int
init(capacity: Int = 50) {
self.capacity = capacity
}
func addAction(_ action: Action) {
if history.count >= capacity {
history.removeFirst() // Удаляем самое старое действие
}
history.append(action)
}
func undo() -> Action? {
history.popLast()
}
}
При частом изменении начала коллекции
Deque работает значительно быстрее
Array.
Heap:
Heap автоматически сортирует элементы по приоритету. Например, идеально для обработки задач с разной срочностью.
Пример:
Система уведомлений, где сообщения от администратора должны показываться первыми.
struct Notification: Comparable {
let message: String
let priority: Int
static func < (lhs: Notification, rhs: Notification) -> Bool {
lhs.priority < rhs.priority
}
}
var notifications = Heap()
notifications.insert(Notification(message: "Обновление системы", priority: 1))
notifications.insert(Notification(message: "Новое сообщение", priority: 3))
// Сначала получим уведомление с priority = 3
let nextNotification = notifications.popMax()
OrderedSet:
OrderedSet - это гибрид
Array и
Set, который сохраняет порядок элементов и гарантирует их уникальность.
Пример:
Список недавно просмотренных товаров в маркетплейсе, где важно и избежать дублей, и сохранить порядок.
var recentProducts = OrderedSet()
recentProducts.append("iPhone 17")
recentProducts.append("iPad Pro")
recentProducts.append("iPhone 17") // Не добавится
print(recentProducts) // ["iPhone 17", "iPad Pro"]
OrderedDictionary:
OrderedDictionary - это словарь, который запоминает порядок добавления элементов.
Пример:
Кэширование данных для экрана списка, где порядок элементов важен.
var userCache = OrderedDictionary()
userCache["user_1"] = User(name: "Анна")
userCache["user_2"] = User(name: "Иван")
// Порядок сохраняется при обходе
for (id, user) in userCache {
print("\(id): \(user.name)") // user_1: Анна, user_2: Иван
}
Зачем это все нужно:
- Производительность: правильные структуры данных экономят ресурсы.
- Читаемость: код становится проще для понимания.
- Надежность: меньше шансов допустить ошибку в реализации.
Вывод:
Разработка - это не только о написании работающего кода, но и о выборе оптимальных инструментов. Постепенно расширяя свой арсенал, вы не просто пишете код, а создаете эффективные и масштабируемые решения.