阅读完需:约 1 分钟
区间(或叫作范围)表达式由具有操作符形式 ..
的 rangeTo
函数辅以 in{: .keyword } 和 !in{: .keyword } 形成。区间是为任何可比较类型定义的。
区间的使用

if (i in 1..10) { // 等同于 1 <= i && i <= 10
println(i)
}

for (i in 1 until 10) { // i in [1, 10) 排除了 10
println(i)
}

for (i in 4 downTo 1) print(i) // 输出“4321”

for (i in 1..4 step 2) print(i) // 输出“13”
for (i in 4 downTo 1 step 2) print(i) // 输出“42”
例子:
fun main() {
val intRange = 1..10 // [1, 10]
val charRange = 'a'..'z'
val longRange = 1L..100L
val floatRange = 1f .. 2f // [1, 2]
val doubleRange = 1.0 .. 2.0
// 打印出所有的区间
println(intRange.joinToString())
// 无法打印出所有的区间,因为float类型默认是区1到2的所有数字包括1.0000等,用toString也这是打印一个描述
println(floatRange.toString())
// 无符号也是可以的
val uintRange = 1U..10U
val ulongRange = 1UL..10UL
// 设置步长
val intRangeWithStep = 1..10 step 2
val charRangeWithStep = 'a'..'z' step 2
val longRangeWithStep = 1L..100L step 5
println(intRangeWithStep.joinToString())
val intRangeExclusive = 1 until 10 // [1, 10)
val charRangeExclusive = 'a' until 'z'
val longRangeExclusive = 1L until 100L
println(intRangeExclusive.joinToString())
val intRangeReverse = 10 downTo 1 // [10, 9, ... , 1]
val charRangeReverse = 'z' downTo 'a'
val longRangeReverse = 100L downTo 1L
println(intRangeReverse.joinToString())
for (element in intRange) {
println(element)
}
intRange.forEach {
println(it)
}
// 判断3.0 在不在 doubleRange 里面
if (3.0 !in doubleRange) {
println("3 in range 'intRange'")
}
if (12 !in intRange) {
println("12 not in range 'intRange'")
}
// 下面的意思 for (i in 0 until array.size) 等于java的 for (i=0 ;i<array.size;i++)
val array = intArrayOf(1, 3, 5, 7)
for (i in 0 until array.size) {
println(array[i])
}
// 更加简便的写法 array.indices 就是 array的个数
for(i in array.indices){
println(array[i])
}
}