Golang中将整数数组中的数字连接成一个数字?

San*_*rog 5 go

我有一个整数数组:

nums := []int{1, 2, 3}
Run Code Online (Sandbox Code Playgroud)

我怎样才能从中得到整数 123 呢?

sbe*_*rry 7

我很欣赏@KelvinS的方法,已经存在一个math.Pow(尽管它处理的是float64s。尽管如此,他的方法打破了你真正追求的,即将每个连续的数字(从右边)提高一个数量级并对数字求和。因此,我能想到的最直接的方法是

func sliceToInt(s []int) int {
    res := 0
    op := 1
    for i := len(s) - 1; i >= 0; i-- {
        res += s[i] * op
        op *= 10
    }
    return res
}

func main() {
    nums := []int{1, 2, 3}
    fmt.Println(sliceToInt(nums))
}
Run Code Online (Sandbox Code Playgroud)

sliceToInt名字不好,但你应该明白这个意思。

https://play.golang.org/p/JS96Nq_so-

尝试尽可能快地实现这一点可能是一种微优化,但如果它恰好位于热路径中,则可能是值得的

BenchmarkPow-8              100000000           13.5 ns/op         0 B/op          0 allocs/op
BenchmarkJoin-8              5000000           272 ns/op           8 B/op          5 allocs/op
BenchmarkBuffer-8            2000000           782 ns/op         160 B/op          8 allocs/op
BenchmarkSliceToInt-8       200000000            8.65 ns/op        0 B/op          0 allocs/op
PASS
Run Code Online (Sandbox Code Playgroud)

  • `nums := []int{1, 20, 3}` 会发生什么?:) (2认同)