区间表达式
- 运算符:
..
,是闭合的区间,即:1..10,包含1与10; - 关键字:
util
,是前闭后开区间; - 关键字:
downTo
,降序迭代 - 关键字:
step
,步长。100 downTo 1 step 2
,100以2的步长降序迭代至1,即 100 98 96 ...
区间表达式由具有操作符形式 ..
的 rangeTo
函数辅以 in
和 !in
形成。
in
-
in
检查一个值是否在区间中; -
!n
检查一个值是否不再区间中。
if (i in 1..10) { // 等同于 1 <= i && i <= 10
println(i)
}
整型区间(IntRange、 LongRange、 CharRange)有一个额外的特性:它们可以迭代。 编译器负责将其转换为类似 Java 的基于索引的 for-循环而无额外开销:
for (i in 1..4) print(i) // 输出“1234”
for (i in 4..1) print(i) // 什么都不输出
如果你想倒序迭代数字呢?也很简单。你可以使用标准库中定义的 downTo() 函数:
for (i in 4 downTo 1) print(i) // 输出“4321”
能否以不等于 1 的任意步长迭代数字? 当然没问题, step() 函数有助于此:
for (i in 1..4 step 2) print(i) // 输出“13”
for (i in 4 downTo 1 step 2) print(i) // 输出“42”
要创建一个不包括其结束元素的区间,可以使用 until 函数:
for (i in 1 until 10) { // i in [1, 10) 排除了 10
println(i)
}
for
如果你想要通过索引遍历一个数组或者一个 list,你可以这么做:
for (i in array.indices) {
println(array[i])
}
或者你可以用库函数 withIndex:
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}
网友评论