8

以下代码段可以很好地将数字拆分为数字,但它太长了:

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

我映射它们toString以获得应用时的实际值,toInt而不是Int代表Char返回的值toList

我是 Scala 的新手,我不习惯 scala 的表达风格。有没有更短的方法来做到这一点。

4

3 回答 3

26
scala> 123.toString.map(_.asDigit)
res0: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3)
于 2012-10-11T16:47:15.047 回答
5
(""+123).map(_-48)

我认为是最短的,但有时清晰更重要。(至少一个额外的字符'0'代替48!)

于 2012-10-11T19:22:45.250 回答
0

即使您不更改为 String 也可以:

def getDigits(n: Int): List[Int] = {
  def getDigits(n:Int, digits:List[Int]):List[Int]={
    if(n< 10) n::digits else getDigits(n/10, ( n % 10)::digits )
   }
  getDigits(n,Nil)
}

输出:

scala> getDigits(123)
 res55: List[Int] = List(1, 2, 3)

scala> getDigits(12300)
 res56: List[Int] = List(1, 2, 3, 0, 0)

scala> getDigits(123001)
 res57: List[Int] = List(1, 2, 3, 0, 0, 1)
于 2021-08-07T09:44:38.203 回答