如何将 int slice 字符串转换为 int slice?

Chr*_*per -1 string go slice

例如输入:(类型:string

"[156, 100, 713]"
Run Code Online (Sandbox Code Playgroud)

示例转换:(类型:切片int

[156, 100, 713]
Run Code Online (Sandbox Code Playgroud)

mhu*_*ter 5

给定一个字符串

in := "[156, 100, 713]"
Run Code Online (Sandbox Code Playgroud)

首先,让我们去掉方括号:

trimmed := strings.Trim(in, "[]")
//=> "156, 100, 713"
Run Code Online (Sandbox Code Playgroud)

接下来,将字符串拆分为一段字符串:

strings := strings.Split(trimmed, ", ")
//=> []string{"156", "100", "713"}
Run Code Online (Sandbox Code Playgroud)

现在我们可以将字符串转换为整数

ints := make([]int, len(strings))

for i, s := range strings {
    ints[i], _ = strconv.Atoi(s)
}

fmt.Printf("%#v\n", ints)
//=> []int{156, 100, 713}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅 go 文档:https : //devdocs.io/go/strings/index


icz*_*cza 5

除了 mhutter 的回答之外,还要注意您的输入string看起来像一个 JSON 数组(也许它来自 JSON 文本?)。

如果您这样对待它,您可以将其内容解组为一个[]int切片。直接从中解析数字不会更快(因为encoding/json包使用反射),但它肯定更简单:

s := "[156, 100, 713]"

var is []int
if err := json.Unmarshal([]byte(s), &is); err != nil {
    panic(err)
}

fmt.Println(is)
fmt.Printf("%#v", is)
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

[156 100 713]
[]int{156, 100, 713}
Run Code Online (Sandbox Code Playgroud)