Что такое срезы и как они используются?
Срезы делают использование 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:
Любые вопросы? Вы можете связаться со мной ЗДЕСЬ