范围
范围表达式通过rangeTo函数形成,实用..操作符补全in或!in。范围可以定义在任何可比较的类型当中,但是对于部分原生数据类型有优化实现。
if (i in 1..10) { // equivalent of 1 <= i && i <= 10
println(i)
}
部分类型(IntRange、LongRange、CharRange)范围有额外的特性:它们可以遍历。编译器转化这样的代码为类似Java中基于索引的for循环,不需要额外的开销。
for (i in 1..4) print(i) // prints "1234"
for (i in 4..1) print(i) // prints nothing
如果你想反向遍历所有的数字呢?这很简单,你可以使用downTo()函数,该函数定义在标准库中。
for (i in 4 downTo 1) print(i) // prints "4321"
有没有可能按照一定的步数遍历所有的数字呢,而不是按照步进1?当然,step函数将帮助你实现该功能:
for (i in 1..4 step 2) print(i) // prints "13"
for (i in 4 downTo 1 step 2) print(i) // prints "42"
为了创建一个范围但不包含最后一个元素,你可以使用until函数:
for (i in 1 until 10) { // i in [1, 10), 10 is excluded
println(i)
}