Scala - 将Seq [Int]转换为包含Seq中数字的单个数字

时间:2015-10-27 11:17:06

标签: scala functional-programming seq

在Scala中,如何将Seq [Int]转换为由Seq中的数字组成的单个数字。

e.g。

Seq(2,3,45,10)234510作为数字

一种简单的方法是

Seq(2,3,45,10).mkString.toLong

是否有更好的,更高效/更有效的方式?

2 个答案:

答案 0 :(得分:5)

Seq(2,3,45,10).reduce((x,y) =>  x * math.pow(10,math.floor(math.log10(y)) + 1).toInt + y)

Seq(2,3,45,10).map(BigDecimal(_)).reduce((x,y) =>  x * BigDecimal(10).pow(y.precision) + y)

但实际上我认为_.mkString.toLong是性能最高的唯一问题,它仅适用于十进制表示。对于任意基数,你可以做

BigInt(Seq(0x2,0x3,0x45,0x10).map(BigInt(_).toString(16)).mkString, 16)

答案 1 :(得分:2)

def toNumber(seq:Seq[Int]):Int = {    
  def append(scale:Int)(n:Int, m:Int):Int = if(m>=scale) append(scale*10)(n, m) else n*scale + m

  seq.foldLeft(0)(append(1))
}