解释Kotlin范围操作符的示例代码

295 阅读3分钟

Kotlin范围操作符(..)是一个独特的操作符,允许你创建一个数字或字符的区间。

然后,这个数字或字符的范围可以用于特定的目的,比如:

  • 检查一个值是否包含在该范围内
  • 遍历该范围并产生一个输出
  • 执行集合操作,如filtermap

在Kotlin中可以创建三种类型的范围:用于整数的IntRange ,用于字符的CharRange ,以及用于长数的LongRange

一个范围通常使用两个点(..)符号来创建。接下来让我们看看一些范围的操作。

下面的例子显示了如何检查数字值2 是否在1..4IntRange 内:

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
*/

最后,你可以对一个范围进行集合操作,比如filtermap ,如下图所示:

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]

mapfilter 操作产生一个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 语句,在一个值的区间内进行迭代,或者执行集合操作,如filtermap

在学习Kotlin范围操作符方面做得很好!👍