前言
在Java中,使用for语句通过索引遍历数组时,可在for语句中定义临时循环变量,并控制变量的范围和递增,如下示例:
String [] array = new String [] {"One", "Two", "Three", "Four", "Five"};
// 使用索引的方式遍历数组
for (int i = 0; i < array.length; i ++) {
System.out.println(array[i]);
}
但是在Kotlin中,你会发现,是无法再for语句中定义临时循环变量。但是在Kotlin中有区间表达式可以完美实现这些功能。
val array = listOf("One", "Two", "Three", "Four", "Five")
for (i in 0 .. array.size - 1) {
println(array[i])
}
以上就是区间的一种(rangeTo
),区间表达式通常可以使用in
或者!in
操作符表示“在”或者“不在”某个区间内。
区间的几种类型
rangeTo
区间
rangeTo()
区间可以使用两个连续的点..
表示,表示在这个区间范围之内,如上面的示例所示,rangeTo()
表示的区间是左右闭包的,也就是包含区间声明的所有取值。上面的示例中,数组的索引是0~size-1
,区间结尾必须是size-1
.
downTo
区间
downTo
和rangeTo
是一对相互倒置的区间,是从最后往前遍历,同样也是左右闭包的区间
val array = listOf("One", "Two", "Three", "Four", "Five")
for (i in array.size - 1 downTo 0) {
println(array[i])
}
until
区间
until
区间表示从区间的开头开始,遇到结尾结束。这是一个左闭右开的区间,until
的含义是直到xxx停止,但是不会包含结束条件的值。于是,前面遍历数组的可以写成以下代码:
val array = listOf("One", "Two", "Three", "Four", "Five")
for (i in 0 until array.size) {
println(array[i])
}
区间遍历的间隔
使用区间进行遍历可以设置编辑间隔,通过step
来定义。
val array = listOf("One", "Two", "Three", "Four", "Five")
for (i in 0 until array.size step 2) {
println(array[i])
}
上面的示例中表示输出数组每隔2的元素,这个等同于java中的
String [] array = new String [] {"One", "Two", "Three", "Four", "Five"};
// 使用索引的方式遍历数组
for (int i = 0; i < array.length; i+2) {
System.out.println(array[i]);
}