我查看了 Ranges 的文档,但没有提到向后的范围。
是否可以执行以下操作:
for (n in 100..1) {
println(n)
}
并得到结果:
100
99
98
...
使用 downTo 如下:
for (n in 100 downTo 1) {
//
}
就像“for”的通用范围函数的示例:
private infix fun Int.toward(to: Int): IntProgression {
val step = if (this > to) -1 else 1
return IntProgression.fromClosedRange(this, to, step)
}
用法:
// 0 to 100
for (i in 0 toward 100) {
// Do things
}
// 100 downTo 0
for (i in 100 toward 0) {
// Do things
}
正如其他人指出的那样,正确答案是
for (n in 100 downTo 1) {
println(n)
}
但是 Kotlin 团队为什么选择100 downTo 1
vs100..1
呢?
我认为100..1
当我们尝试使用变量而不是文字时,语法会很糟糕。如果我们输入
for (n in b..a)
那么就不清楚我们想要使用什么循环。
我们可能打算倒数,但如果b
结果小于a
,那么我们的程序实际上会向上计数!那将是错误的来源。
-
使用负一元运算符支持反转范围,如-(1..100)
.
要在该范围内调用方法,您需要用括号将其括起来,如
(-(1..100)).foreach { println(it) }
(100 downto 1).map{ println(it) }