Golang:int to slice conversion

时间:2015-09-25 21:07:11

标签: indexing go slice

总golang(和编程)noob!

给定任何六位数字,如何输出一个切片,其中该数字的每个字符在切片中被分配一个单独的位置?

例如,包含所有这些字符的切片(让我们称之为s)将具有s [0] =第一个数字,s [1] =第二个数字,s [2] =第三个数字和等等。

非常感谢任何帮助!

3 个答案:

答案 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)
    }
}

https://play.golang.org/p/M3aOUnNIbdv