Indexing Golang:int-to-slice转换
总戈朗(和编程)noob 给定任何六位数字,如果该数字的每个字符都被分配到片中的一个单独位置,如何输出片 例如,一个包含所有这些字符的片(我们称之为s)将有s[0]=第一位,s[1]=第二位,s[2]=第三位,依此类推Indexing Golang:int-to-slice转换,indexing,go,slice,Indexing,Go,Slice,总戈朗(和编程)noob 给定任何六位数字,如果该数字的每个字符都被分配到片中的一个单独位置,如何输出片 例如,一个包含所有这些字符的片(我们称之为s)将有s[0]=第一位,s[1]=第二位,s[2]=第三位,依此类推 任何帮助都将不胜感激 这是一个两步过程,首先将int转换为string,然后迭代字符串或转换为slice。因为内置的range函数允许您迭代字符串中的每个字符,所以我建议将其保留为字符串。像这样的东西 import "strconv" str := strconv.Itoa(
任何帮助都将不胜感激 这是一个两步过程,首先将int转换为string,然后迭代字符串或转换为slice。因为内置的range函数允许您迭代字符串中的每个字符,所以我建议将其保留为字符串。像这样的东西
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
}
func IntToSlice(n int64,序列[]int64)[]int64{
如果n!=0{
i:=n%10
//sequence=append(sequence,i)//逆序输出
sequence=append([]int64{i},sequence…)
返回IntToSlice(n/10,顺序)
}
返回序列
}
以上答案是正确的。下面是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)
}
}
主程序包
进口(
“fmt”
)
函数反转(s[]int){
对于i,j:=0,len(s)-1;i
为什么不使用字符串@MDrollette:在字符串上搜索返回符文@JimB如果您想直接而不是通过
范围
索引到字符串中,我假设您需要转换为[]符文
@MDrollette通常是(如果您希望按符文/字符而不是字节进行索引)。但是,从strconv.Itoa
中,您知道每个符文都是一个字节,因此直接索引字符串将给出完全相同的值(即在本例中rune(str[3])=[]符文(str)[3]
)请至少添加一些解释,说明为什么回答这个问题如果我理解正确,您希望将12345
转换为[1,2,3,4,5]
。我说的不对吗?这是一个很好的答案——但它颠倒了顺序。要保留初始顺序,请改用sequence=append([]int{i},s..)
。