Срезы массивов. Часть 1
Часть раздела Основы путешествия по Swift на Coddy — урок 73 из 86.
Иногда вам не нужен весь массив целиком — достаточно лишь его части. Swift позволяет легко извлекать подмножество элементов, используя сегментацию массивов с помощью операторов диапазона.
Чтобы получить срез, вы используете диапазон внутри квадратных скобок. Наиболее распространенный подход использует оператор полуоткрытого диапазона (..<), который включает начальный индекс, но исключает конечный индекс:
let numbers = [10, 20, 30, 40, 50]
let slice = numbers[1..<4]
print(slice) // [20, 30, 40]Здесь 1..<4 возвращает нам элементы с индексами 1, 2 и 3, но не с индексом 4. Это полезно, когда вы точно знаете, где именно нужно остановиться.
Если вы хотите включить конечный индекс, используйте оператор закрытого диапазона (...):
let letters = ["a", "b", "c", "d", "e"]
let slice = letters[1...3]
print(slice) // ["b", "c", "d"]Одна важная деталь: результатом создания среза является ArraySlice, а не обычный Array. Если вам нужен настоящий массив, оберните его в Array():
let original = [1, 2, 3, 4, 5]
let sliced = Array(original[0..<3])
print(sliced) // [1, 2, 3]Задание
ЛегкоНапишите функцию getMiddleElements, которая принимает numbers, start и end и возвращает срез массива от начального индекса до (но не включая) конечного индекса.
Используйте оператор полуоткрытого диапазона (..<), чтобы извлечь указанную часть массива и вернуть ее как обычный массив.
Параметры:
numbers([Int]): Массив для получения срезаstart(Int): Начальный индекс (включительно)end(Int): Конечный индекс (исключительно)
Возвращает: Массив, содержащий элементы от начального индекса до (но не включая) конечного индекса ([Int])
Пример: Если numbers равен [10, 20, 30, 40, 50, 60], start равен 1, а end равен 4, функция должна вернуть [20, 30, 40].
Шпаргалка
Swift позволяет извлекать часть массива, используя сегментацию массива (array slicing) с операторами диапазона.
Используйте полуоткрытый оператор диапазона (..<), чтобы получить сегмент от начального индекса до конечного индекса (не включая его):
let numbers = [10, 20, 30, 40, 50]
let slice = numbers[1..<4]
print(slice) // [20, 30, 40]Используйте закрытый оператор диапазона (...), чтобы включить конечный индекс:
let letters = ["a", "b", "c", "d", "e"]
let slice = letters[1...3]
print(slice) // ["b", "c", "d"]Сегментация массива возвращает ArraySlice. Чтобы преобразовать его в обычный Array, оберните его в Array():
let original = [1, 2, 3, 4, 5]
let sliced = Array(original[0..<3])
print(sliced) // [1, 2, 3]Попробуйте сами
func getMiddleElements(numbers: [Int], start: Int, end: Int) -> [Int] {
// Напишите код здесь
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияСоставное присваиваниеПовторение: Простая математикаОператоры сравнения7Основы ввода-вывода
Функция PrintИнтерполяция строкВвод через ReadLineПреобразование типовПовторение — до 120Повторение — True или False10Функции
Объявление функцииПараметры и аргументыВозвращаемые значенияМетки аргументовПовторение: функция SigmaПовторение: функция валидацииЗначения по умолчанию13Итерирование по последовательностям
Итерирование по элементамМетод enumerateИтерирование по строкам, ч. 1Итерирование по строкам, ч. 22Переменные
Let против VarАннотации типовЧислаСтрокиBooleanСоглашения об именованииИтоги — Инициализация переменных5Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение: простая логикаЛогические операторы. Часть 3Тернарный оператор8Калькулятор разделения счета
Приветственное сообщениеПолучение ввода14Массивы: Продвинутый уровень
Срезы массивов. Часть 1Срезы массивов. Часть 2Операторы последовательностейМетод Contains3Опционалы
Что такое опционалыРазвертывание с помощью if letGuard letОператор объединения с nilИтоги — безопасное развертывание6Принятие решений
Оператор IfКонструкция If - ElseПовторение — Простой калькуляторОператор SwitchSwitch с диапазонами9Циклы
Цикл For-InЦикл WhileЦикл Repeat-WhileBreakContinueПовторение: ФакториалДиапазоны в циклахВложенные циклыПовторение: Динамический ввод