如何将数字拆分为scala中的数字

时间:2012-10-11 16:43:07

标签: scala split numbers

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

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

我为他们toString添加了内容,以便在应用toInt时获取实际值,而不是代表Int返回的Char的{​​{1}}值。

我是Scala的新手,我不习惯scala的表现风格。 有没有更短的方法呢。

3 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:5)

(""+123).map(_-48)

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

答案 2 :(得分: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)