Kotlin - 范围
Kotlin 的 range 由其两个端点值定义,这两个值都包含在 range 中。Kotlin range 使用 rangeTo() function 创建,或者简单地使用 downTo 或 (..) 运算符创建。range 的主要操作是 contains,通常以 in 和 !in 运算符的形式使用。
示例
1..10 // 从 1 到 10 的整数范围 a..z // 从 a 到 z 的字符范围 A..Z // 从 A 到 Z 的大写字符范围
range 的两端始终包含在 range 中,这意味着 1..4 表达式对应值 1、2、3 和 4。
使用 rangeTo() 创建 Range
要创建 Kotlin range,我们在 range 的起始值上调用 rangeTo() function,并将结束值作为参数提供。
示例
fun main(args: Array<String>) {
for ( num in 1.rangeTo(4) ) {
println(num)
}
}
运行上述 Kotlin 程序,将生成以下输出:
1 2 3 4
使用 .. 运算符创建 Range
rangeTo() 通常以其运算符形式 .. 调用。因此上述代码可以使用 .. 运算符重写如下:
示例
fun main(args: Array<String>) {
for ( num in 1..4 ) {
println(num)
}
}
运行上述 Kotlin 程序,将生成以下输出:
1 2 3 4
使用 downTo() 运算符创建 Range
如果要定义一个反向 range,可以使用 downTo 运算符:
示例
fun main(args: Array<String>) {
for ( num in 4 downTo 1 ) {
println(num)
}
}
运行上述 Kotlin 程序,将生成以下输出:
4 3 2 1
Kotlin step() 函数
可以使用 step() 函数定义 range 中值之间的距离。请看以下示例:
示例
fun main(args: Array<String>) {
for ( num in 1..10 step 2 ) {
println(num)
}
}
运行上述 Kotlin 程序,将生成以下输出:
1 3 5 7 9
Kotlin 字符范围
可以像为整数值创建 range 一样为字符创建 range。
示例
fun main(args: Array<String>) {
for ( ch in 'a'..'d' ) {
println(ch)
}
}
运行上述 Kotlin 程序,将生成以下输出:
a b c d
Kotlin reversed() 函数
reversed() 函数可用于反转 range 的值。
示例
fun main(args: Array<String>) {
for ( num in (1..5).reversed() ) {
println(num)
}
}
运行上述 Kotlin 程序,将生成以下输出:
5 4 3 2 1
Kotlin until() 函数
until() 函数可用于创建 range,但会跳过给定的最后一个元素。
示例
fun main(args: Array<String>) {
for ( num in 1 until 5 ) {
println(num)
}
}
运行上述 Kotlin 程序,将生成以下输出:
1 2 3 4
last、first、step 元素
可以使用 range 的 first、last 和 step 属性来查找 range 的第一个值、最后一个值或 step。
示例
fun main(args: Array<String>) {
println((5..10).first)
println((5..10 step 2).step)
println((5..10).reversed().last)
}
运行上述 Kotlin 程序,将生成以下输出:
5 2 5
过滤 Range
filter() 函数将返回匹配给定 predicate 的元素列表:
示例
fun main(args: Array<String>) {
val a = 1..10
val f = a.filter { T -> T % 2 == 0 }
println(f)
}
运行上述 Kotlin 程序,将生成以下输出:
[2, 4, 6, 8, 10]
范围中的唯一值
distinct() 函数将从具有重复值的范围中返回一个唯一值的列表:
示例
fun main(args: Array<String>) {
val a = listOf(1, 1, 2, 4, 4, 6, 10)
println(a.distinct())
}
运行上述 Kotlin 程序时,将生成以下输出:
[1, 2, 4, 6, 10]
范围工具函数
我们可以对范围应用许多其他有用的函数,例如 min、max、sum、average、count:
示例
fun main(args: Array<String>) {
val a = 1..10
println(a.min())
println(a.max())
println(a.sum())
println(a.average())
println(a.count())
}
运行上述 Kotlin 程序时,将生成以下输出:
1 10 55 5.5 10
测验时间 (面试与考试准备)
Q 1 - 关于 Kotlin Ranges,下列哪项是正确的?
A - Kotlin range 是由起始值、结束值和步长定义的值序列。
B - Kotlin range 可以使用 rangeTo() 和 downTo() 函数或 .. 操作符创建。
C - 我们可以对任何可比较类型使用 range。
D - 以上全部
答案:D
解释
所有给定的陈述关于 Kotlin Range 都是正确的。
Q 2 - 下列程序的输出是什么:
fun main(args: Array<String>) {
val a = 1..20
println(a.average())
}
A - 将打印 10.5
B - 将仅引发警告
C - 编译将因错误停止
D - 以上皆非
答案:A
解释
average() 函数用于获取范围值的平均值。
Q 2 - 下列程序的输出是什么:
fun main(args: Array<String>) {
val a = 1..20
if( 3 in a){
print( true )
}else{
print( false )
}
}
A - true
B - false
C - 编译将因错误停止
D - 以上皆非
答案:A
解释
它将返回 true,因为 3 在 range 中存在,因此 in 操作符将返回 true。