Deque в Swift, её преимущества и недостатки

Deque в Swift, её преимущества и недостатки

 Victor

Deque (произносится как "дек", не декью и не декуе) работает так же, как и Array: это упорядоченная, с произвольным доступом, изменяемая, заменяемая по диапазону коллекция с целочисленными индексами.

Основное преимущество Deque перед Array заключается в том, что она поддерживает эффективные вставки и удаления с обоих концов.


Это делает Deque отличным выбором в тех случаях, когда нам нужна очередь "первый вошел - первый вышел". Чтобы подчеркнуть это, Deque предоставляет удобные операции для вставки и удаления элементов с обоих концов:


var colors: Deque = ["red", "yellow", "blue"]

colors.prepend("green")

colors.append("orange")

// `colors` теперь будет ["green", "red", "yellow", "blue", "orange"]

colors.popFirst() // "green"

colors.popLast() // "orange"


Примечание: На графике среднее время обработки каждого элемента представлено в логарифмической шкале. Меньше - лучше. Бенчмарки выполнялись на iMac Pro 2017 года.


Конечно, мы также можем использовать любой из знакомых методов MutableCollection и RangeReplaceableCollection для доступа и изменения элементов коллекции. 

Индексы работают точно так же, как и в массиве - первый элемент всегда имеет нулевой индекс:


colors[1] // "yellow"

colors[1] = "peach"

colors.insert(contentsOf: ["violet", "pink"], at: 1)

// `colors` теперь ["red", "violet", "pink", "peach", "blue"]

colors.remove(at: 2) // "pink"

// `colors` теперь ["red", "violet", "peach", "blue"]

colors.sort()

// `colors` теперь ["blue", "peach", "red", "violet"]


Чтобы поддерживать эффективную вставку спереди, deques должны отказаться от сохранения своих элементов в буфере. Это приводит к тому, что они работают немного медленнее массивов в случаях, когда не требуется вставка/удаление элементов спереди - поэтому не стоит слепо заменять все массивы на deques.

Ещё немного информации можно найти здесь.


А про разработку можно прочитать в моём авторском канале.


Report Page