本篇文章整理一下Kotlin常用的循环遍历写法。
我们经常会使用以下方法进行遍历。
for(i in 0..args.size - 1) {
println(args[i])
}
Tips: Koltin可以通过调用kotlin.ranges包中的
rangeTo()函数及其操作符形式的..轻松的创建两个值的区间。通常rangTo会辅以in或者!in函数。整数类型区间(IntRange、LongRange、CharRange)还有一个拓展特性:可以对对其进行迭代。这些区间也是相应类型的等差数列。这种区间通常用于for循环中迭代。要反向迭代数字,使用downTo函数。也可以通过任意步长(不一定为1)迭代数字,通过step完成。 要迭代不包含其结束元素的数字区间(左闭右开区间),使用until函数。
for (i in 1..4) { //等同于1 <= i && i <= 4
print(i)
}
for (i in 4 downTo 1) print(i) //输出结果:4321
for (i in 1..8 step 2) print(i) //输出:1357
for (i in 1 until 10) { // i in [1, 10), 10被排除
print(i)
}
但是Array有一个可读性更强的扩展属性lastIndex。上边的循环可以写成这样:
for(i in 0..args.lastIndex) {
println(args[i])
}
实际上我们不需要知道最后一个索引,有一个更简单的写法:
for(i in 0 until args.szie) {
println(args[i])
}
当然也可以使用下标扩展属性indices得到他的范围,indices是一个IntRange类型的值:
for (i in args.indices) {
println(args[i])
}
还有一个更加直接的写法,通过下边的方式直接迭代集合:
for (arg in args) {
println(arg)
}
或者还可以使用forEach函数,传递一个lambda表达式来处理每个元素:
args.forEach { arg ->
println(arg)
}
在上边这些例子中,都增加一个索引变量,并在循环中通过索引获取元素。但是如果我们迭代的是List,最后两个例子底层使用iterator,而其他的例子仍是通过索引获取元素。最后的两个遍历方法:withIndex函数,他返回一个Iterable对象,该对象可以被解构为当前索引和元素:
for ((index,arg) in args.withIndex()) {
println("$index: $arg")
}
forEachIndexed函数,他为每个索引和参数提供了一个lambda表达式:
args.forEachIndexed { index, arg ->
println("$index: $arg")
}