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 的 firstlaststep 属性来查找 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]

范围工具函数

我们可以对范围应用许多其他有用的函数,例如 minmaxsumaveragecount

示例

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。