9.1.1.11 区间与数列
2 分钟阅读
9.1.1.11 区间与数列
区间与数列在 Kotlin 中定义了值的序列,支持区间运算符、迭代、自定义步长值以及等差数列。
区间
Kotlin 让你可以使用 kotlin.ranges 包中的 .rangeTo() 和 .rangeUntil() 函数轻松创建值的区间。
区间表示一组具有确定起点和终点的有序值。默认情况下,它每步递增 1。例如,1..4 表示数字 1、2、3 和 4。
要创建:
- 闭区间,请使用
..运算符调用.rangeTo()函数。它同时包含起始值和结束值。 - 开区间,请使用
..<运算符调用.rangeUntil()函数。它包含起始值但不包含结束值。
例如:
| |
区间在 for 循环中迭代时特别有用:
| |
要按相反顺序迭代数字,请使用 downTo 函数代替 ..。
| |
你也可以使用 step() 函数以自定义步长迭代数字,而不是默认的递增 1:
| |
数列
Int、Long 和 Char 这类整数类型的区间可以被视为等差数列。在 Kotlin 中,这些数列由特殊类型定义:IntProgression、LongProgression 和 CharProgression。
数列有三个基本属性:first 元素、last 元素和非零的 step。第一个元素是 first,后续元素是前一个元素加上 step。对步长为正的数列进行迭代,等价于 Java/JavaScript 中带索引的 for 循环。
| |
当你通过迭代区间隐式创建数列时,该数列的 first 和 last 元素就是区间的端点,而 step 为 1。
| |
要定义自定义的数列步长,请在区间上使用 step 函数。
| |
数列的 last 元素按以下方式计算:
- 对于正步长:不大于结束值、且满足
(last - first) % step == 0的最大值。 - 对于负步长:不小于结束值、且满足
(last - first) % step == 0的最小值。
因此,last 元素并不总是与指定的结束值相同。
| |
数列实现了 Iterable<N>,其中 N 分别是 Int、Long 或 Char,因此你可以在各种集合函数(例如 map、filter 等)中使用它们。
| |