Kotlin 范围
最后修改于 2024 年 1 月 29 日
本文展示了如何在 Kotlin 中使用范围。
范围是定义上下限之间的一系列值。
Kotlin 范围使用 .. 运算符或 rangeTo 和 downTo 函数创建。 默认情况下,Kotlin 范围是包含的; 也就是说,1..3 创建一个包含 1、2、3 值的范围。 两个值之间的距离由步长定义; 默认步长为 1。
Kotlin 范围创建
以下示例展示了如何在 Kotlin 中创建简单的范围。
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()
}
该示例创建了四个值范围。
for (i in 1..30)
print("$i ")
1..30 创建一个从 1 到 30 的值序列,包括边界。 我们使用 for 循环遍历该范围。
for (i in 30 downTo 1)
print("$i ")
使用 downTo 关键字,我们创建一个从 30 降到 1 的值序列。
for (i in 1.rangeTo(30))
print("$i ")
rangeTo 函数创建一个定义边界之间的值范围; 它等同于 .. 运算符。
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 中创建一个字符范围。
package com.zetcode
fun main() {
for (c in 'a'..'k')
print("$c ")
println()
for (c in 'k' downTo 'a')
print("$c ")
}
该示例创建了两个按升序和降序排列的字母范围。
for (c in 'a'..'k')
print("$c ")
我们创建并打印 'a' 到 'k' 字符。
for (c in 'k' downTo 'a')
print("$c ")
我们创建并打印 'k' 到 'a' 字符。
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 函数来遍历值范围。
package com.zetcode
fun main() {
(1..5).forEach(::println)
(1..5).reversed().forEach { e -> print("$e ") }
}
该示例使用 forEach 函数遍历这些范围。
(1..5).forEach(::println)
使用 forEach 函数,我们打印范围 1..5 中的所有值。
(1..5).reversed().forEach { e -> print("$e ") }
在此行中,我们使用 reversed 反转范围,并使用 forEach 循环遍历该范围。
1 2 3 4 5 5 4 3 2 1
Kotlin 范围迭代器
我们可以使用经典的迭代器在 Kotlin 中循环遍历范围。
package com.zetcode
fun main() {
val chars = ('a'..'f')
val it = chars.iterator()
while (it.hasNext()) {
val e = it.next()
println(e)
}
}
该示例使用迭代器循环遍历字符范围。
val chars = ('a'..'f')
val it = chars.iterator()
我们创建一个字符范围,并从该范围创建一个迭代器。
while (it.hasNext()) {
val e = it.next()
println(e)
}
在一个 while 循环中,我们遍历范围的元素。 hasNext 方法检查范围中是否有下一个元素,而 next 方法返回范围中的下一个元素。
a b c d e f
Kotlin 范围步长
使用 step 关键字,我们可以定义范围值的步长。
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 范围中使用步长。
for (e in 1..20 step 2) {
print("$e ")
}
for 循环遍历范围的值。 该范围的步长为 2。
println((1..10 step 2).last) println((1..10 step 3).first) println((1..10 step 4).step)
Kotlin 范围包含 last、first 和 step 属性,它们分别返回最后一个值、第一个值和步长。
1 3 5 7 9 11 13 15 17 19 1 6 11 16 9 1 4
Kotlin 范围 filter、reduce、map
Kotlin 范围包含 filter、reduce 和 map 操作。
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)
}
该示例将过滤、规约和映射应用于一个范围。
val r = rnums.filter { e -> e % 2 == 0 }
使用 filter 函数,我们过滤掉偶数。 偶数可以被 2 整除而没有余数。 该操作返回一个值列表。
val r2 = rnums.reduce { total, next -> next * 2 - 1 }
规约操作对范围的每个元素应用给定的表达式,以生成单个值。
var r3 = rnums.map { e -> e * 5 }
映射操作对每个元素应用给定的操作。 映射返回一个修改后的值列表。
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 范围 min、max、sum、average
Kotlin 范围包含预定义的规约操作,包括 min、max、sum 和 average
package com.zetcode
fun main() {
val r = (1..10)
println(r.min())
println(r.max())
println(r.sum())
println(r.average())
}
该示例打印范围 1..10 值的最小值、最大值、总和和平均值。
1 10 55 5.5
来源
在本文中,我们介绍了 Kotlin 范围。
作者
列出 所有 Kotlin 教程。