2.4while和for循环

Kotlin的迭代应该是和Java最接近的。while循环和Java完全一样。for循环仅以唯一一种形式存在,和Java的for-each循环一致。

2.4.1while循环

Kotlin中有while循环和do-while循环,它们的语法和Java中相应的循环没有任何区别:

while(condition) {
  **
}

do {
   **
} while (condition)

2.4.2迭代数字:区间和数列

在Kotlin中没有常规的Java for循环。在这种循环中,先初始化变量,在循环的每一步更新它的值,并在值满足某个限制条件时退出循环。为了替代最常见的循环用法,Kotlin使用了区间的概念。
区间本质上就是两个值之间的间隔,这两个值通常是数字:一个起始值,一个结束值。只用..运算符表示区间:

val oneToTen = 1..10

注意Kotlin的区间是包含的或者闭合的,意味着这两个值始终是区间的一部分。

for (i in 1..100) {
    print(i)
}

2.4.3迭代map

让我们来看看可以怎样迭代map:

val binaryReps = TreeMap<Char, String>()
for (c in 'A'..'F') {
     val binary = Integer.toBinaryString(c.toInt())
     binaryReps[c] = binary
}

..语法不仅可以创建数字区间,还可以创建字符区间。这里使用它迭代用A开始到F的所有字符,包括F。
这里用到了另外一个实用的小技巧,根据键来访问和更新map的简明语法。可以使用map[key]读取值,并使用map[key] = vaule设置它们,而不需要调用get和put。

2.4.4使用in检查集合和区间的成员

使用in运算符来检查一个值是否在区间中,或者它的逆运算!in来检查这个值是否不在区间中:

fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'
>>>println(isLetter('l'))
true
>>>println(isNotDigit('y'))
true

in运算符和!in运算符也适用于when表达式:

fun recognize(c: Char) = when (c) {
        in '0'..'9' -> "是数字"
        in 'a'..'z', in 'A'..'Z' -> "是字母"
        else -> "不知道是啥"
    }
>>>println(recognize('2'))
是数字    

猜你喜欢

转载自blog.csdn.net/qq_26413249/article/details/80303020
今日推荐