新运算符: “..” ,"in ","!in" ,"downto","step"
注意:
1. 关系运算符的优先级低于算术运算符。
2. 关系运算符的优先级高于赋值运算符。
区间运算符(a..b)
区间运算符,顾名思义就是可以用来表示两个操作数之间的范围集合。a..b也就我们平时所说的,从a到b所有的数字集合。在Kotlin语言之中,有两种区间运算符:闭区间运算符和开区间运算符。
- 闭区间运算符 : “a..b”从a到b范围内所有的值,包括a和b。
- 半闭区间运算符 : “a until b”从a到b范围内所有的值,包括a和不包括b。
区间表达式由具有操作符形式 “..” 或 rangeTo 辅以 in 和 !in 而得。区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例:
for (i in 1..10) { // 等同于 1 <= i && i <= 10
println(i)
}
for (i in 1.rangeTo(10)) { // 等同于 1 <= i && i <= 10
println(i)
}
for (i in 'a'..'z') { // 等同于 'a' <= i && i <= 'z'
println(i)
}
in 代表在区间内,!in表示不在。
整型区间有一个额外的特性:它们可以迭代。 Kotlin编译器负责将其转换为类似 Java 的基于索引的 for循环而无额外开销。
for (i in 1..4) print(i) // 输出“1234”
for (i in 4..1) print(i) // 什么都不输出
运行上述例子,我们可以发现如果只写 “..”,这个区间值只是顺序。如果你想倒序迭代数字呢?也很简单。你可以使用标准库中定义的 downTo 方法:
for (i in 4 downTo 1) print(i) // 输出“4321”
能否以不等于 1 的任意步长迭代数字? 当然没问题, 使用step方法就可以做到:
for (i in 1..4 step 2) print(i) // 输出“13”
for (i in 4 downTo 1 step 2) print(i) // 输出“42”
那么我们如何创建一个半闭区间呢?可以使用 until方法 :
for (i in 1 until 10) { // i in [1, 10) 排除了 10
println(i)
}