Kotlin Ranges 怎么用?范围表达式有哪些用法和示例?

文章导读
Previous Quiz Next Kotlin 的 range 由其两个端点值定义,这两个值都包含在 range 中。Kotlin range 使用 rangeTo() function 创建,或者简单地使用 downTo 或 (..) 运算符创建。range 的主要操
📋 目录
  1. Ⅰ 使用 rangeTo() 创建 Range
  2. Ⅱ 使用 .. 运算符创建 Range
  3. Ⅲ 使用 downTo() 运算符创建 Range
  4. Ⅳ Kotlin step() 函数
  5. Ⅴ Kotlin 字符范围
  6. Ⅵ Kotlin reversed() 函数
  7. Ⅶ Kotlin until() 函数
  8. Ⅷ last、first、step 元素
  9. Ⅸ 过滤 Range
  10. Ⅹ 范围中的唯一值
A A

Kotlin - 范围



Previous
Quiz
Next

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。