在kotlin中创建独家范围

Che*_*ari 25 range kotlin

我刚开始Kotlin.我想从创建范围1n哪里nexcluded.我发现它Kotlin有范围,我可以使用它们如下

1..n

但这是一个inclusive包括1和的范围n.如何创建exclusive范围.

Nyc*_*cto 64

您可以使用Kotlin stdlib中的until函数:

for (i in 1 until 5) {
    println(i)
}
Run Code Online (Sandbox Code Playgroud)

哪个会打印:

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

  • 这适用于排除范围中的最后一个数字的情况,但是当我们想要排除第一个数字时呢? (6认同)
  • @leoderprofi是的事情发生了变化."直到"现在已经从Kotlin 1.1.4开始优化 (4认同)

rci*_*ati 9

不确定这是否是最好的方法,但你可以定义一个Int扩展,它创建一个IntRange从(下限+1)到(上限 - 1).

fun Int.exclusiveRangeTo(other: Int): IntRange = IntRange(this + 1, other - 1)
Run Code Online (Sandbox Code Playgroud)

然后以这种方式使用它:

for (i in 1 exclusiveRangeTo n) { //... }
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到有关范围如何工作的更多详细信


Mah*_*zad 7

对于 Kotlin 1.8 及更高版本,请使用新的..<(rangeUntil) 运算符:

for (i in 1 ..< 5) {
    println(i) // 1, 2, 3, 4
}
Run Code Online (Sandbox Code Playgroud)

它还提供了无法完成的可能性until

val floatRange = 0f ..< 1f
val dateRange = LocalDate.of(2022, 1, 1) ..< LocalDate.of(2023, 1, 1)
val stringRange = "1z" ..< "9a"
// OR anything implementing Comparable
Run Code Online (Sandbox Code Playgroud)

请参阅介绍该运算符的Kotlin 官方视频rangeUntil