# Kotlin 范围

> 原文： [http://zetcode.com/kotlin/ranges/](http://zetcode.com/kotlin/ranges/)

Kotlin 范围教程显示了如何在 Kotlin 中使用范围。

范围是定义的下限和上限之间的一系列值。

使用`..`运算符或`rangeTo()`和`downTo()`函数创建 Kotlin 范围。 Kotlin 范围默认为包含范围； 也就是说，`1..3`创建一个 1、2、3 值的范围。 两个值之间的距离由步长定义。 默认步骤是 1。

## Kotlin 创建范围

以下示例显示了如何在 Kotlin 中创建简单范围。

`KotlinRangeCreate.kt`

```kt
package com.zetcode

fun main() {

    for (i in 1..30)
        print("$i ")

    println()

    for (i in 30 downTo 1)
        print("$i ")

    println()

    for (i in 1.rangeTo(30))
        print("$i ")

    println()

    for (i in 30.downTo(1))
        print("$i ")

    println()
}

```

该示例创建四个值范围。

```kt
for (i in 1..30)
    print("$i ")

```

`1..30`创建从 1 到 30 的一系列值，包括边界。 我们使用`for`循环遍历该范围。

```kt
for (i in 30 downTo 1)
    print("$i ")

```

使用`downTo`关键字，我们创建了一系列从 30 降到 1 的值。

```kt
for (i in 1.rangeTo(30))
    print("$i ")

```

`rangeTo()`函数在定义的边界之间创建一个值范围； 它等效于`..`运算符。

```kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 

```

这是输出。

## Kotlin 的字符范围

我们可以在 Kotlin 中创建一系列字符。

`KotlinRangeChars.kt`

```kt
package com.zetcode

fun main() {

    for (c in 'a'..'k')
        print("$c ")

    println()

    for (c in 'k' downTo 'a')
        print("$c ")
}

```

本示例创建两个字母范围的升序和降序。

```kt
for (c in 'a'..'k')
    print("$c ")

```

我们创建并打印`"a"`到`"k"`个字符。

```kt
for (c in 'k' downTo 'a')
    print("$c ")

```

我们创建并将`"k"`打印为`"a"`字符。

```kt
a b c d e f g h i j k 
k j i h g f e d c b a

```

这是输出。

## Kotlin 范围`forEach()`

我们可以使用`forEach()`函数遍历值的范围。

`KotlinRangeForEach.kt`

```kt
package com.zetcode

fun main() {

    (1..5).forEach(::println)

    (1..5).reversed().forEach { e -> print("$e ") }
}

```

该示例使用`forEach()`函数遍历范围。

```kt
(1..5).forEach(::println)

```

使用`forEach()`函数，我们可以打印`1..5`范围内的所有值。

```kt
(1..5).reversed().forEach { e -> print("$e ") }

```

在这一行中，我们使用`reversed()`反转范围，并使用`forEach()`遍历该范围。

```kt
1
2
3
4
5
5 4 3 2 1 

```

这是输出。

## Kotlin 范围迭代器

我们可以使用经典的迭代器在 Kotlin 中循环遍历。

`KotlinRangeIterator.kt`

```kt
package com.zetcode

fun main() {

    val chars = ('a'..'f')
    val it = chars.iterator()

    while (it.hasNext()) {

        val e = it.next()
        println(e)
    }
}

```

该示例使用迭代器遍历一系列字符。

```kt
val chars = ('a'..'f')
val it = chars.iterator()

```

我们创建一个字符范围和一个从该范围开始的迭代器。

```kt
while (it.hasNext()) {

    val e = it.next()
    println(e)
}

```

在`while`循环中，我们遍历范围的元素。 `hasNext()`方法检查范围内是否有下一个元素，`next()`方法返回范围内的下一个元素。

```kt
a
b
c
d
e
f

```

这是输出。

## Kotlin 范围`step`

使用`step`关键字，我们可以定义范围值之间的步长。

`KotlinRangeStep.kt`

```kt
package com.zetcode

fun main() {

    for (e in 1..20 step 2) {
        print("$e ")
    }

    println()

    for (e in 1..20 step 5) {
        print("$e ")
    }

    println()

    println((1..10 step 2).last)
    println((1..10 step 3).first)
    println((1..10 step 4).step)

    println()
}

```

该示例显示了如何在 Kotlin 范围内使用`step`。

```kt
for (e in 1..20 step 2) {
    print("$e ")
}

```

`for`循环遍历范围的值。 范围具有步骤 2。

```kt
println((1..10 step 2).last)
println((1..10 step 3).first)
println((1..10 step 4).step)

```

Kotlin 范围包含`last`，`first`和`step`属性，这些属性返回最后一个，第一个值和步骤。

```kt
1 3 5 7 9 11 13 15 17 19 
1 6 11 16 
9
1
4

```

这是输出。

## Kotlin 范围过滤器，归约，映射

Kotlin 范围包含过滤，归约和映射操作。

`KotlinRangeFilterReduceMap.kt`

```kt
package com.zetcode

fun main() {

    val rnums = (1..15)

    println(rnums)

    val r = rnums.filter { e -> e % 2 == 0 }
    println(r)

    val r2 = rnums.reduce { total, next -> next * 2 - 1 }
    println(r2)

    var r3 = rnums.map { e -> e * 5 }
    println(r3)
}

```

该示例在范围上应用过滤，归约和映射。

```kt
val r = rnums.filter { e -> e % 2 == 0 }

```

使用`filter()`函数，我们可以滤除偶数。 偶数可以被二除而无余数。 该操作返回值列表。

```kt
val r2 = rnums.reduce { total, next -> next * 2 - 1 }

```

归约运算将给定表达式应用于每个范围元素以产生单个值。

```kt
var r3 = rnums.map { e -> e * 5 }

```

映射操作将给定操作应用于每个元素。 映射返回修改值的列表。

```kt
1..15
[2, 4, 6, 8, 10, 12, 14]
29
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75]

```

这是输出。

## Kotlin 范围最小，最大，总和，平均值

Kotlin 范围包含预定义的归约运算，包括`min()`，`max()`，`sum()`和`average()`

`KotlinRangeMinMaxSumAvg.kt`

```kt
package com.zetcode

fun main() {

    val r = (1..10)

    println(r.min())
    println(r.max())
    println(r.sum())    
    println(r.average())
}

```

该示例打印范围为`1..10`的值的最小值，最大值，总和和平均值。

```kt
1
10
55
5.5

```

这是输出。

在本教程中，我们涵盖了 Kotlin 范围。 您可能也对相关教程感兴趣： [Kotlin 正则表达式](/kotlin/regularexpressions/)， [Kotlin 变量教程](/kotlin/variables/)， [Kotlin 字符串教程](/kotlin/strings/)， [Kotlin 控制流](/kotlin/controlflow/)， 或列出[所有 Kotlin 教程](/all/#kotlin)。