我有一个整数数组:
nums := []int{1, 2, 3}
我该如何将它转换成整数123呢?
我欣赏 @KelvinS 的方法,虽然已经存在一个 math.Pow
函数(尽管它只适用于 float64 类型)。不过,他的方法解决了你真正想要实现的目标,即将每个连续数字(从右往左)提高一个数量级,并将它们相加。因此,在我看来,最简单直接的方法是:
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))
}
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
package main
import (
"strconv"
"log"
)
func join(nums []int) (int, error) {
var str string
for i := range nums {
str += strconv.Itoa(nums[i])
}
num, err := strconv.Atoi(str)
if err != nil {
return 0, err
} else {
return num, nil
}
}
func main() {
nums := []int{1, 2, 3}
num, err := join(nums)
if err != nil {
log.Println(err)
} else {
log.Println(num)
}
}
您还可以遍历切片并使用算术运算构建整数
package main
import (
"fmt"
)
func Pow(a, b int) int {
result := 1
for i := 0; i < b; i++ {
result *= a
}
return result
}
func main() {
nums := []int{1, 2, 3}
num := 0
length := len(nums)
for i, d := range nums {
num += d * Pow(10, length-i-1)
}
fmt.Println(num)
}
遍历您的切片并将每个项添加到缓冲区:
var buf bytes.Buffer
nums := []int{1, 2, 3}
for i := range nums {
buf.WriteString(fmt.Sprintf("%d", nums[i]))
}
i, err := strconv.Atoi(buf.String())
这里是GoPlay:
https://play.golang.org/p/8w-gc2S2xR
package main
import (
"fmt"
"strconv"
"strings"
)
func sliceToInt(ints []int) int {
stringVals := make([]string, len(ints))
for ind, val := range ints {
stringVals[ind] = strconv.Itoa(val)
}
newInt, _ := strconv.Atoi(strings.Join(stringVals, ""))
return newInt
}
func main() {
s1 := []int{1, 2, 3}
fmt.Println(sliceToInt(s1))
s2 := []int{1, 20, 3}
fmt.Println(sliceToInt(s2))
}
结果:
123
1203
for _, x in s
和res = 10*res + x
。 - aMikenums := []int{1, 20, 3}
会发生什么? :) - Martin Gallagherbig.NewInt
。 - Ari