Spec-Zone.ru › Kotlin 2

Диапазоны и прогрессии

Диапазоны и прогрессии определяют последовательности значений в Kotlin и поддерживают операторы диапазонов, итерацию, пользовательские значения шага и арифметические прогрессии.

Диапазоны

В Kotlin можно легко создавать диапазоны значений с помощью функций .rangeTo() и .rangeUntil() из пакета kotlin.ranges.

Диапазон представляет собой упорядоченный набор значений с заданными началом и концом. По умолчанию на каждом шаге значение увеличивается на 1. Например, 1..4 представляет числа 1, 2, 3 и 4.

Чтобы создать:

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

  • диапазон с исключённой верхней границей, вызовите функцию .rangeUntil() с оператором ..<. В такой диапазон входит начальное значение, но не конечное.

Например:

fun main() {
//sampleStart
    // Closed-ended range: includes both 1 and 4
    println(4 in 1..4)
    // true
    
    // Open-ended range: includes 1, excludes 4
    println(4 in 1..<4)
    // false
//sampleEnd
}

Диапазоны особенно полезны для итерации в циклах for:

fun main() {
//sampleStart
    for (i in 1..4) print(i)
    // 1234
//sampleEnd
}

Чтобы перебирать числа в обратном порядке, используйте функцию downTo вместо ...

fun main() {
//sampleStart
    for (i in 4 downTo 1) print(i)
    // 4321
//sampleEnd
}

Также можно перебирать числа с пользовательским шагом с помощью функции step() вместо шага по умолчанию, равного 1:

fun main() {
//sampleStart
    for (i in 0..8 step 2) print(i)
    println()
    // 02468
    for (i in 0..<8 step 2) print(i)
    println()
    // 0246
    for (i in 8 downTo 0 step 2) print(i)
    // 86420
//sampleEnd
}

Прогрессии

Диапазоны целочисленных типов, таких как Int, Long и Char, можно рассматривать как арифметические прогрессии. В Kotlin такие прогрессии представлены специальными типами: IntProgression, LongProgression и CharProgression.

У прогрессий есть три основных свойства: элемент first, элемент last и ненулевой step. Первый элемент — это first, каждый последующий элемент равен предыдущему элементу плюс step. Итерация по прогрессии с положительным шагом эквивалентна циклу for с индексом в Java/JavaScript.

for (int i = first; i <= last; i += step) {
  // ...
}

Если прогрессия неявно создаётся при переборе диапазона, элементы first и last этой прогрессии совпадают с границами диапазона, а step равен 1.

fun main() {
//sampleStart
    for (i in 1..10) print(i)
    // 12345678910
//sampleEnd
}

Чтобы задать пользовательский шаг прогрессии, используйте функцию step для диапазона.


fun main() {
//sampleStart
    for (i in 1..8 step 2) print(i)
    // 1357
//sampleEnd
}

Элемент last прогрессии вычисляется следующим образом:

  • Для положительного шага: максимальное значение, не превышающее конечное значение, такое, что (last - first) % step == 0.

  • Для отрицательного шага: минимальное значение, не меньшее конечного значения, такое, что (last - first) % step == 0.

Таким образом, элемент last не всегда совпадает с заданным конечным значением.


fun main() {
//sampleStart
    for (i in 1..9 step 3) print(i) // the last element is 7
    // 147
//sampleEnd
}

Прогрессии реализуют Iterable<N>, где N — это Int, Long или Char соответственно, поэтому их можно использовать в различных функциях коллекций, таких как map, filter и других.


fun main() {
//sampleStart
    println((1..10).filter { it % 2 == 0 })
    // [2, 4, 6, 8, 10]
//sampleEnd
}
1 апреля 2025 г.
ПоследовательностиЧтение стандартного ввода

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/ranges.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API