2012-10-11 71 views
5

El siguiente fragmento de código funciona bien para dividir un número en sus dígitos, pero es demasiado largo:¿Cómo dividir un número en sus dígitos en Scala

val digits = (num toString).toList map(_.toString) map(_.toInt) 

les maped toString para obtener el valor real cuando se aplica toInt y no el valor Int que representa el Char devuelto por toList.

Soy nuevo en Scala, no estoy acostumbrado al estilo expresivo de la scala. ¿Hay una manera más corta de hacer esto?

+1

Debería utilizar 'asDigit' como mencionó Luigi, pero, para que lo sepa, podría haber escrito su versión como' num.toString.map (_. toString.toInt) '. – dhg

Respuesta

20
scala> 123.toString.map(_.asDigit) 
res0: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3) 
5
(""+123).map(_-48) 

es que creo que, literalmente, la más corta, pero a veces es más importante la claridad. (¡Al menos un carácter adicional para '0' en lugar de 48!)

+3

awesome 1, claridad 0. –

+1

Shorter: ("" +123) map (_- 48) – djjeck

+0

De todos modos, no creo que OP quisiera literalmente el más corto :) – djjeck

Cuestiones relacionadas