Kotlin范围操作符(..)是一个独特的操作符,允许你创建一个数字或字符的区间。
然后,这个数字或字符的范围可以用于特定的目的,比如:
- 检查一个值是否包含在该范围内
- 遍历该范围并产生一个输出
- 执行集合操作,如
filter和map
在Kotlin中可以创建三种类型的范围:用于整数的IntRange ,用于字符的CharRange ,以及用于长数的LongRange 。
一个范围通常使用两个点(..)符号来创建。接下来让我们看看一些范围的操作。
下面的例子显示了如何检查数字值2 是否在1..4 的IntRange 内:
if (2 in 1..4) {
print("2 is inside 1 to 4")
}
因为数字2 在这个范围内,所以上面的print() 语句将被Kotlin执行。
你也可以将一个变量初始化为一个范围,如下图所示:
var numRange = 1..4
if (2 in numRange) {
print("2 is inside 1 to 4")
}
接下来,你可以使用for 语句对一个范围进行迭代,就像这样:
var numRange = 1..4
for (i in numRange) println(i)
/* Output:
1
2
3
4
*/
对一个范围的迭代是包括起点和终点的。
如果你不想包括端点,你可以用until 关键字切换.. 符号:
var numRange = 1 until 4 // range of 1 - 3
for (i in numRange) println(i)
/* Output:
1
2
3
*/
最后,你可以对一个范围进行集合操作,比如filter 和map ,如下图所示:
var numRange = 1..5
var numList = numRange.map {
it + 3
}
print(numList) // [4, 5, 6, 7, 8]
numList = numRange.filter {
it % 2 == 0
}
print(numList) // [2, 4]
map 和filter 操作产生一个List<Int> 类型,你可以将其存储在一个变量中。
Kotlin CharRange例子
Kotlin也允许你创建一个由字符组成的CharRange 类型的范围,如下图所示:
var charRange = 'a'..'f'
if ('b' in charRange) {
print("b is inside a to f")
}
请记住,Kotlin的字符范围是区分大小写的。当你检查一个大写字母in 一个小写字母的范围时,它将返回false
var charRange = 'a'..'f'
if ('B' !in charRange) {
print("Uppercase B is NOT inside a to f")
}
一个字符范围必须在小写字母范围或大写字母范围之间保持一致。
如果你混合了大小写,你需要从大写字母开始,因为Kotlin遵循ASCII的字符排序。
如果你搞乱了范围排序,Kotlin将无法从范围中返回任何值。
看一下下面的例子:
var charRange = 'a'..'C'
for(i in charRange) println(i) // prints nothing
charRange = 'X'..'c'
/*
Output:
X
Y
Z
[
\
]
^
_
`
a
b
c
*/
你可以在CharRange 类型上执行同样的操作,就像在IntRange 类型上一样。
Kotlin范围递增的操作
最后,你可以操纵Kotlin范围中的递增是如何运作的。
前面的例子都显示了Kotlin范围是如何从低值到高值进行的。
例如,你可以通过使用downTo 操作符或reversed() 函数来逆转进度。
这里有一个例子:
for (i in 1..5) print(i) // 12345
for (i in 5 downTo 1) print(i) // 54321
for (i in (1..5).reversed()) print(i) // 54321
你也可以操纵进度,在每次迭代中移动不止一个step 。
例如,你可以在范围进展中每次移动2 步,如下所示:
for (i in 1..5 step 2) print(i) // 135
for (i in 6 downTo 1 step 2) print(i) // 642
step 的值默认为1 ,而且它必须总是大于0 ,否则Kotlin会抛出一个运行时错误。
这就是Kotlin中的范围操作符。
范围运算符产生的Range 类型的值可以用来创建一个条件性的if 语句,在一个值的区间内进行迭代,或者执行集合操作,如filter 和map 。
在学习Kotlin范围操作符方面做得很好!👍