Что такое срезы и как они используются?

Срезы делают использование collections в Swift более эффективным. Это дает нам возможность писать эффективный код и по-настоящему разобраться с Indices. Так что же, приступим?

Сложность: Начинающий | Легко | Нормальный | Испытывающий

Предпосылки:

  • Некоторое знание коллекций в Swift

Терминология

Массив: упорядоченная серия объектов одного типа.

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

Перечисление: полный упорядоченный список элементов коллекции.

Индекс: здесь размещаются файлы, которые вы хотите зафиксировать в репозитории git. Также известен как плацдарм.

Индексы: позиция числа, присвоенная массиву.

Целое число: число без дробной части, то есть без цифр после десятичной точки.

Смещение: в массиве или другой структуре данных смещение представляет собой целое число, представляющее расстояние между началом структуры данных и рассматриваемым объектом.

Набор: неупорядоченный набор значений (где все значения одного типа)

Срез: фрагмент коллекции, который представляет собой представление подпоследовательности основной коллекции.

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

Коллекции

В Swift коллекции (как и в других языках) жизненно важны. ArraySlices предоставляют представление массива, а не нового массива, что означает, что как исходный массив, так и фрагмент имеют одинаковые признаки.

Обо всем этом рассказывается в моей статье про ArraySlice, но для обзора вот краткое изложение.

Сводка по массиву

Если у нас есть ages массив

let ages = [1,5,12,15,2,26,67,36]

мы можем взять второй и третий элементы массива ages и поместить его в срез массива.

let sliceOfAges = ages[1...2]

однако индексы для sliceOfAges взяты из исходного массива, что означает, что следующее приводит к довольно неприятной ошибке - поскольку мы находимся за пределами для массива

sliceOfAges[0] // EXC_BAD_INSTRUCTION out of bounds

Резюме набора

Для набора мы можем иметь те же данные о возрасте, но, конечно, результат будет неупорядоченным.

let agesSet = [1,5,12,15,2,26,67,36]

Если мы извиняемся за довольно поверхностное имя (извините), мы можем ожидать возврата другого ArraySlice.

let sliceOfAgesSet = agesSet.dropLast()

и действительно полный тип let sliceOfAgesSet: Slice<Set<Int>>

конечно, индексы набора (конечно, неупорядоченного) не так важны, как массив.

Краткое содержание словаря

Для словаря все довольно знакомо после этапа инициализации.

let agesDict : [Int: Int] = [0:1, 1:5, 2:12, 3:15, 4:2, 5:26, 6:67, 7:26]

Мы снова можем использовать dropLast() для создания среза массивов

let sliceOfDict = agesDict.dropLast()

производя вывод типа:

let sliceOfDict: Slice<Dictionary<Int, Int>>

Вывод:

ArraySlices полезны и на самом деле невероятно похожи на Slice, который применяется к любому collection. Если вас интересует эта более широкая структура, прочтите мою сопроводительную статью о срезах массивов. Статья? Это здесь".

Расширьте свои знания

  • У Apple есть индексный справочник (ЗДЕСЬ)

Контактное лицо в Twitter:

Любые вопросы? Вы можете связаться со мной ЗДЕСЬ