2012-03-05 21 views

Respuesta

25

Uso DOWNTO como en:

for (n in 100 downTo 1) { 
// 
} 
+5

Por qué no es "para (n en 100..1)"? ¿No podría ser un acuerdo que si el primer número es más grande entonces un rango cuenta hacia atrás? – x2bool

1

Si nos fijamos en la página exacta se enlazó a, hay una sugerencia para una función reversed que lo haría deja que hagas for (n in (1..100).reversed()) pero parece que todavía no está implementado. El operador .. siempre cuenta hacia arriba.

+0

Vi ese comentario y esperaba que no estuviera actualizado. – jjnguy

+0

@jjnguy hmm ... quizás así sea. Commit '86a33f8' (18 de enero de 2012) agrega pruebas para' for (n en 100 downto 1) 'y' for (n in - (1..100)) 'teniendo ambos el mismo significado. ellos trabajan para ti? – hobbs

+3

- (1..100) ya no funciona. La sintaxis correcta es para (n en 100 downTo 1) –

6

Los rangos inversos son compatibles con el operador unario - como -(1..100).

Para invocar un método en ese rango, deberá rodearlo con paréntesis como en (-(1..100)).foreach { println(it) }.

+4

¿Hay alguna posibilidad de que la función rangeTo() funcione un poco más y la maneje de forma automática? Tener un rango negativo para mí significa contar desde -1 hasta -100. – jjnguy

+0

Le sugiero que eche un vistazo a los siguientes problemas relacionados con rangos en Kotlin y envíe un nuevo problema explicando en detalle su sugerencia: [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) –

2

Como se ha señalado por otros, la respuesta correcta es

for (n in 100 downTo 1) { 
    println(n) 
} 

Pero ¿por qué eligió el equipo Kotlin 100 downTo 1 vs 100..1?

Creo que la sintaxis 100..1 sería incorrecta cuando intentemos usar variables en lugar de literales. Si escribimos

for (n in b..a)

entonces no estaría claro qué bucle se quiere utilizar.

Es posible que tengamos la intención de contar hacia atrás, pero si b resulta ser más pequeño que a, ¡entonces nuestro programa realmente contaría hacia arriba! Esa sería una fuente de errores.

Cuestiones relacionadas