我看着the documentation for the Ranges,我看不到倒退范围。在Kotlin中,我可以创建一个向后计数的范围吗?
是否有可能做这样的事情:
for (n in 100..1) {
println(n)
}
而得到的结果:
100
99
98
...
我看着the documentation for the Ranges,我看不到倒退范围。在Kotlin中,我可以创建一个向后计数的范围吗?
是否有可能做这样的事情:
for (n in 100..1) {
println(n)
}
而得到的结果:
100
99
98
...
使用DOWNTO为:
for (n in 100 downTo 1) {
//
}
如果你看一下你链接到确切的页面,有一个reversed
功能会建议让你做for (n in (1..100).reversed())
,但它似乎还没有实现。 ..
操作员总是加注。
如使用-(1..100)
中的减号-
一元运算符支持反向范围。
要调用该范围的方法,则需要用圆括号包围它,如(-(1..100)).foreach { println(it) }
。
有没有可能使rangeTo()函数变得更智能并自动处理?对我有一个负范围意味着从-1到-100。 – jjnguy 2012-03-05 14:05:05
我建议你看看以下与Kotlin范围有关的问题,并提交一个新问题,详细解释你的建议: [KT-861](http://youtrack.jetbrains.com/issue/KT-861) ,[KT-1045](http://youtrack.jetbrains.com/issue/KT-1045),[KT-1076](http://youtrack.jetbrains.com/issue/KT-1076) – 2012-03-05 20:19:48
正如指出的其他人,正确的答案是
for (n in 100 downTo 1) {
println(n)
}
但为什么科特林队选择了100 downTo 1
VS 100..1
?
我认为当我们尝试使用变量而不是文字时,语法100..1
会很糟糕。 如果我们输入
for (n in b..a)
那就不是很清楚,我们想用什么循环。
我们可能打算向后倒数,但如果b
原来小于a
,那么我们的程序实际上会向上计数!这将是错误的来源。
为什么不是“for(n in 100..1)”?难道这不是一个协议,如果第一个数字越大,范围倒数? – x2bool 2014-09-02 10:09:17