significado - ¿Scala hacia abajo o hacia abajo para el ciclo?
hacia adelante significado (5)
Habiendo programado en Pascal, encuentro esta definición agradable de usar:
implicit class RichInt(val value: Int) extends AnyVal {
def downto (n: Int) = value to n by -1
def downtil (n: Int) = value until n by -1
}
Usado de esta manera:
for (i <- 10 downto 0) println(i)
En Scala, a menudo usa un iterador para hacer un ciclo for
en un orden creciente como:
for(i <- 1 to 10){ code }
¿Cómo lo harías para que pase de 10 a 1? Supongo que 10 to 1
da un iterador vacío (como las matemáticas de rango habitual)?
Hice una secuencia de comandos Scala que lo resuelve llamando al reverso en el iterador, pero no es bueno en mi opinión, es el siguiente el camino a seguir?
def nBeers(n:Int) = n match {
case 0 => ("No more bottles of beer on the wall, no more bottles of beer." +
"/nGo to the store and buy some more, " +
"99 bottles of beer on the wall./n")
case _ => (n + " bottles of beer on the wall, " + n +
" bottles of beer./n" +
"Take one down and pass it around, " +
(if((n-1)==0)
"no more"
else
(n-1)) +
" bottles of beer on the wall./n")
}
for(b <- (0 to 99).reverse)
println(nBeers(b))
La respuesta de @Randall es buena como oro, pero para completarla, quería agregar algunas variaciones:
scala> for (i <- (1 to 10).reverse) {code} //Will count in reverse.
scala> for (i <- 10 to(1,-1)) {code} //Same as with "by", just uglier.
Puedes usar la clase Range:
val r1 = new Range(10, 0, -1)
for {
i <- r1
} println(i)
Scala proporciona muchas formas de trabajar hacia abajo en bucle.
Primera solución: con "a" y "por"
//It will print 10 to 0. Here by -1 means it will decremented by -1.
for(i <- 10 to 0 by -1){
println(i)
}
2.ª solución: con "a" y "reverso"
for(i <- (0 to 10).reverse){
println(i)
}
3ª solución: con "solo"
//Here (0,-1) means the loop will execute till value 0 and decremented by -1.
for(i <- 10 to (0,-1)){
println(i)
}
scala> 10 to 1 by -1
res1: scala.collection.immutable.Range = Range(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)