Метод enumerate
Часть раздела Основы путешествия по Swift на Coddy — урок 70 из 86.
Иногда при переборе массива вам нужно знать не только сам элемент, но и его позицию. Хотя вы могли бы вручную отслеживать индекс с помощью переменной-счетчика, Swift предлагает более элегантное решение: метод enumerated().
Когда вы вызываете enumerated() у массива, он возвращает последовательность кортежей, где каждый кортеж содержит индекс и элемент:
let colors = ["Red", "Green", "Blue"]
for (index, color) in colors.enumerated() {
print("\(index): \(color)")
}
// 0: Red
// 1: Green
// 2: BlueОбратите внимание, как мы распаковываем каждый кортеж прямо в цикле с помощью (index, color). Это дает нам доступ к обоим значениям без какого-либо дополнительного кода.
Это особенно полезно, когда вам нужно отобразить нумерованные списки или выполнить операции, зависящие от позиции элемента:
let tasks = ["Wake up", "Exercise", "Eat breakfast"]
for (index, task) in tasks.enumerated() {
print("Task \(index + 1): \(task)")
}
// Задача 1: Wake up
// Задача 2: Exercise
// Задача 3: Eat breakfastМетод enumerated() делает ваш код чистым и читаемым по сравнению с ручным управлением отдельной переменной-счетчиком.
Задание
ЛегкоНапишите функцию formatWithPositions, которая принимает items и возвращает отформатированную строку, показывающую каждый элемент с его порядковым номером.
Используйте метод enumerated() для итерации по массиву и создания строки, где перед каждым элементом стоит его порядковый номер, начиная с 1.
Логика:
- Пройдите по массиву, используя
enumerated() - Для каждого элемента создайте строку в формате
"position. item"(используя нумерацию с 1) - Объедините все отформатированные строки символом новой строки (
\n)
Параметры:
items([String]): Массив строк для форматирования
Возвращаемое значение: Одна строка, где каждый элемент находится на новой строке с префиксом в виде его порядкового номера (String). Формат: "1. item1\n2. item2\n3. item3"
Пример: Если items равен ["Apple", "Banana", "Cherry"], функция должна вернуть:
"1. Apple\n2. Banana\n3. Cherry"Примечание: Если массив пуст, верните пустую строку "".
Шпаргалка
Метод enumerated() возвращает последовательность кортежей, содержащих как индекс, так и элемент массива:
let colors = ["Red", "Green", "Blue"]
for (index, color) in colors.enumerated() {
print("\(index): \(color)")
}
// 0: Red
// 1: Green
// 2: BlueКаждый кортеж разлагается непосредственно в цикле с использованием синтаксиса (index, element), обеспечивая доступ как к позиции, так и к значению.
Это полезно для создания нумерованных списков путем добавления 1 к индексу, отсчитываемому от нуля:
let tasks = ["Wake up", "Exercise", "Eat breakfast"]
for (index, task) in tasks.enumerated() {
print("Task \(index + 1): \(task)")
}
// Task 1: Wake up
// Task 2: Exercise
// Task 3: Eat breakfastПопробуйте сами
func formatWithPositions(items: [String]) -> String {
// Напишите код здесь
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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Повторение: ФакториалДиапазоны в циклахВложенные циклыПовторение: Динамический ввод