Как в Scala преобразовать Seq [Int] в одно число, состоящее из чисел в Seq.
e.g.
От Seq(2,3,45,10)
до 234510
в виде числа
Простой метод
Seq(2,3,45,10).mkString.toLong
Есть ли лучший и, возможно, более производительный / функциональный способ?
Как в Scala преобразовать Seq [Int] в одно число, состоящее из чисел в Seq.
e.g.
От Seq(2,3,45,10)
до 234510
в виде числа
Простой метод
Seq(2,3,45,10).mkString.toLong
Есть ли лучший и, возможно, более производительный / функциональный способ?
Seq(2,3,45,10).reduce((x,y) => x * math.pow(10,math.floor(math.log10(y)) + 1).toInt + y)
or
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)
Long
(9,223,372,036,854,775,807
), задолго до того, как столкнетесь сOutOfMemoryException
. - person Zoltán   schedule 27.10.2015scala> Seq(666, -6, 5).mkString.toLong java.lang.NumberFormatException: For input string: "666-65"
- person Kevin Meredith   schedule 27.10.2015