Метод WithIndex
Часть раздела Основы путешествия по Kotlin на Coddy. Урок 75 из 93.
При переборе списка часто нужно знать не только элемент, но и его позицию. Метод withIndex() сразу предоставляет и то, и другое.
Вызови withIndex() у любого списка, чтобы получить пары из индекса и значения:
val colors = listOf("Red", "Green", "Blue")
for ((index, color) in colors.withIndex()) {
println("$index: $color")
}
// Вывод:
// 0: Red
// 1: Green
// 2: BlueОбратите внимание на синтаксис внутри скобок: (index, color). Это называется деструктуризацией: она распаковывает индекс и значение в отдельные переменные. Вы можете назвать эти переменные как угодно, если это имеет смысл для вашего кода.
Этот подход чище, чем вручную отслеживать индекс с помощью переменной-счётчика. Он особенно полезен, когда нужно отображать нумерованные списки или выполнять разные действия в зависимости от позиции:
val tasks = listOf("Wake up", "Exercise", "Eat breakfast")
for ((i, task) in tasks.withIndex()) {
println("Step ${i + 1}: $task")
}
// Вывод:
// Step 1: Wake up
// Step 2: Exercise
// Step 3: Eat breakfastЗадание
СреднеНа вход вы получите список имён студентов. Сначала прочитайте количество студентов, затем прочитайте каждое имя.
Используя withIndex(), выведите каждого студента с его порядковым номером (начиная с 1, а не с 0).
Формат ввода:
- Первая строка: целое число
n, обозначающее количество студентов - Следующие
nстрок: имена студентов (строки)
Формат вывода:
Выведите каждого студента в отдельной строке в формате:
Rank 1: Alice
Rank 2: Bob
Rank 3: CharlieПомните, что withIndex() выдаёт индексы, начиная с 0, поэтому вам нужно скорректировать их, чтобы порядковые номера начинались с 1.
Попробуйте сами
fun main() {
// Считать количество студентов
val n = readLine()!!.toInt()
// Считать имена студентов в список
val students = mutableListOf<String>()
for (i in 1..n) {
students.add(readLine()!!)
}
// TODO: Напишите ваш код ниже
// Используйте withIndex() для перебора студентов и вывода их ранга
// Помните: withIndex() даёт индексы, начинающиеся с 0, но ранги должны начинаться с 1
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияСоставное присваиваниеОператоры сравненияПовторение — простая математика7Базовый ввод-вывод
Функция PrintlnШаблоны строкВвод ReadLineПреобразование типовПовторение — лет до выхода на пенсиюПовторение — правда или ложь10Функции
Объявление функцииПараметры и аргументыВозвращаемые значенияИменованные аргументыЗначения по умолчаниюФункции с одним выражениемПовторение — функция SigmaПовторение — функция валидации13Итерация по последовательностям
Итерация по элементамМетод WithIndexИтерация по строкам, ч. 1Итерация по строкам, ч. 2Повторение — индексированные буквы2Переменные
Val и VarВывод типовЧислаСтрокаЛогическое значениеСоглашения об именованииПовторение — инициализация переменных5Операторы, часть 2
Логические операторы, часть 1Логические операторы, часть 2Логические операторы, часть 3Тернарный оператор с выражением ifПовторение — простая логика8Калькулятор разделения счёта
Приветственное сообщениеВвод данных3Обработка null
Что такое безопасность nullТипы, допускающие nullОператор безопасного вызоваОператор ЭлвисаОсновы задания на функцииУтверждение ненулевого значенияПовторение — безопасный доступ6Принятие решений
Инструкция ifIf — ElseIf как выражениеВыражение whenWhen с диапазонамиПовторение — простой калькулятор9Циклы
Цикл ForЦикл WhileЦикл Do-WhileBreakContinueДиапазоны в циклахВложенный циклПовторение — факториалПовторение — динамический вводПотренируйтесь самостоятельно: Песочница Kotlin