总golang(和编程)noob!
给定任何六位数字,如何输出一个切片,其中该数字的每个字符在切片中被分配一个单独的位置?
例如,包含所有这些字符的切片(让我们称之为s)将具有s [0] =第一个数字,s [1] =第二个数字,s [2] =第三个数字和等等。
非常感谢任何帮助!
答案 0 :(得分:2)
func IntToSlice(n int64, sequence []int64) []int64 {
if n != 0 {
i := n % 10
// sequence = append(sequence, i) // reverse order output
sequence = append([]int64{i}, sequence...)
return IntToSlice(n/10, sequence)
}
return sequence
}
答案 1 :(得分:0)
这是一个两步过程,首先将int转换为string,然后迭代字符串或转换为切片。因为内置范围函数允许您迭代字符串中的每个字符,所以我建议将其保留为字符串。像这样的东西;
import "strconv"
str := strconv.Itoa(123456)
for i, v := range str {
fmt.Println(v) //prints each char's ASCII value on a newline
fmt.Printf("%c\n", v) // prints the character value
}
答案 2 :(得分:0)
以上答案正确。这是MBB答案的另一个版本。 避免递归和有效的还原可以提高性能并减少RAM消耗。
package main
import (
"fmt"
)
func reverseInt(s []int) {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
}
func splitToDigits(n int) []int{
var ret []int
for n !=0 {
ret = append(ret, n % 10)
n /= 10
}
reverseInt(ret)
return ret
}
func main() {
for _, n := range splitToDigits(12345) {
fmt.Println(n)
}
}