2012-10-11 12 views
5

następujący fragment działa prawidłowo podzielić liczbę na jej cyfr, ale to zbyt długo:Jak podzielić liczbę na jej cyfr w Scala

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

I maped im toString, aby uzyskać rzeczywistą wartość, gdy stosowane toInt a nie wartość Int reprezentująca wartość Char zwróconą przez toList.

Jestem nowy w Scali, nie jestem przyzwyczajony do ekspresyjnego stylu gry scala. Czy jest to krótsza droga.

+1

Powinieneś użyć 'asDigit', o którym wspomniał Luigi, ale, wiesz, mogłeś napisać swoją wersję jako' num.toString.map (_. toString.toInt) '. – dhg

Odpowiedz

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

to myślę dosłownie najkrótsza, ale czasami czystość jest ważniejsza. (Przynajmniej jedna dodatkowa postać dla '0' zamiast 48!)

+3

niesamowite 1, klarowność 0. –

+1

Krótszy: ("" +123) mapa (_- 48) – djjeck

+0

W każdym razie, nie sądzę, że OP chciał dosłownie najkrótszy :) – djjeck

Powiązane problemy