Kotlin编程语言(七)——区间(ranges)
文章目录
在 Kotlin 中,区间(ranges)是一种常用的数据结构,用于表示一系列连续的值。Kotlin 提供了几种不同的区间类型,包括开区间、闭区间、半开区间等。下面是这些区间的定义和使用方法,以及 .. 和 until 之间的关系和区别。
1. 闭区间(Closed Range)
闭区间包括区间的起点和终点。在 Kotlin 中,闭区间使用 .. 运算符定义。
- 定义
val range = start..end
- 示例
val closedRange = 1..5 // 包括 1 和 5,即 [1, 5]
2. 半开区间(Half-Open Range)
半开区间包括区间的起点,但不包括终点。在 Kotlin 中,半开区间使用 until 函数定义。
- 定义
val range = start until end
- 示例
val halfOpenRange = 1 until 5 // 包括 1,不包括 5,即 [1, 4)
注意:在 Kotlin 中,要定义一个左开右闭区间(即不包括左端点但包括右端点的区间),可以使用一些技巧来实现。Kotlin 没有直接提供这样的区间类型,但可以通过组合操作来实现。
- 使用 IntRange 和 filter 方法:
先创建一个闭区间 [1, 100],然后过滤掉左端点 1。
示例:val range = (1…100).filter { it > 1 }- 使用 IntRange 和 asSequence 方法:
创建一个闭区间 [1, 100],然后转换为序列并过滤掉左端点 1。
示例:val range = (1…100).asSequence().filter { it > 1 }.toList()- 使用 IntRange 和 takeWhile 方法:
创建一个闭区间 [1, 100],然后使用 takeWhile 方法过滤掉左端点 1。
示例:val range = (1…100).asSequence().takeWhile { it <= 100 }.filter { it > 1 }.toList()- 使用 IntRange 和 IntProgression:
创建一个从 2 开始到 100 的闭区间。
示例:val range = 2…100(最简洁)
3. 开区间(Open Range)
开区间既不包括起点也不包括终点。Kotlin 没有直接提供开区间的语法,但可以通过组合操作来实现。
- 定义
val openRange = (start + 1)..(end - 1)
- 示例
val openRange = (1 + 1)..(5 - 1) // 不包括 1 和 5,即 (1, 4)
4. 反向区间(Reverse Range)
反向区间是从终点到起点的区间。在 Kotlin 中,可以使用 downTo 函数定义反向区间。
- 定义
val range = start downTo end
- 示例
val reverseRange = 5 downTo 1 // 从 5 到 1,即 [5, 4, 3, 2, 1]
5. 步长区间(Step Range)
步长区间是指在区间中每隔一定步长取值。在 Kotlin 中,可以使用 step 函数定义步长区间。
- 定义
val range = start..end step stepValue
- 示例
val stepRange = 1..10 step 2 // [1, 3, 5, 7, 9]
关系和区别
-
闭区间
..:- 包括区间的起点和终点。
- 示例:
1..5表示[1, 5]。
-
半开区间
until:- 包括区间的起点,但不包括终点。
- 示例:
1 until 5表示[1, 4)。
-
开区间:
- 既不包括起点也不包括终点。
- 需要手动组合操作来实现。
- 示例:
(1 + 1)..(5 - 1)表示(1, 4)。
-
反向区间
downTo:- 从终点到起点的区间。
- 示例:
5 downTo 1表示[5, 4, 3, 2, 1]。
-
步长区间
step:- 在区间中每隔一定步长取值。
- 示例:
1..10 step 2表示[1, 3, 5, 7, 9]。
总结
- 闭区间
..:包括起点和终点。 - 半开区间
until:包括起点,不包括终点。 - 开区间:既不包括起点也不包括终点,需要手动组合操作。
- 反向区间
downTo:从终点到起点。 - 步长区间
step:每隔一定步长取值。
通过这些不同的区间类型,Kotlin 提供了灵活的方式来处理各种范围和序列的问题。
400

被折叠的 条评论
为什么被折叠?



