在Scala中,如何将Seq [Int]转换为由Seq中的数字组成的单个数字。
e.g。
Seq(2,3,45,10)
以234510
作为数字
一种简单的方法是
Seq(2,3,45,10).mkString.toLong
是否有更好的,更高效/更有效的方式?
答案 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))
}