将 []int 转换为字符串的单行器

基本上我有[]int{1, 2, 3},我想要一个将它转换为字符串“1,2,3”的单行符(我需要自定义分隔符,有时.,有时,,等等)。下面是我能想到的最好的。在网上搜索,似乎没有找到更好的答案。


在大多数语言中,对此都有内置支持,例如:


Python:


> A = [1, 2, 3]

> ", ".join([str(a) for a in A])

'1, 2, 3'

去:


package main


import (

    "bytes"

    "fmt"

    "strconv"

)


// Could not find a one-liner that does this :(.

func arrayToString(A []int, delim string) string {


    var buffer bytes.Buffer

    for i := 0; i < len(A); i++ {

        buffer.WriteString(strconv.Itoa(A[i]))

        if i != len(A)-1 {

            buffer.WriteString(delim)

        }

    }


    return buffer.String()

}


func main() {

    A := []int{1, 2, 3}

    fmt.Println(arrayToString(A, ", "))

}

肯定有一个实用程序埋在 go 中,可以让我用单线做到这一点吗?


我知道有strings.Join(A, ", "),但只有当 A 已经是 [] 字符串时才有效。


德玛西亚99
浏览 159回答 3
3回答

沧海一幻觉

转换A := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}对于单行分隔的字符串,例如“1,2,3,4,5,6,7,8,9” ,请使用:strings.Trim(strings.Join(strings.Fields(fmt.Sprint(A)), delim), "[]")或者:strings.Trim(strings.Join(strings.Split(fmt.Sprint(A), " "), delim), "[]")或者:strings.Trim(strings.Replace(fmt.Sprint(A), " ", delim, -1), "[]")并从一个函数中返回它,例如在这个例子中:package mainimport "fmt"import "strings"func arrayToString(a []int, delim string) string {&nbsp; &nbsp; return strings.Trim(strings.Replace(fmt.Sprint(a), " ", delim, -1), "[]")&nbsp; &nbsp; //return strings.Trim(strings.Join(strings.Split(fmt.Sprint(a), " "), delim), "[]")&nbsp; &nbsp; //return strings.Trim(strings.Join(strings.Fields(fmt.Sprint(a)), delim), "[]")}func main() {&nbsp; &nbsp; A := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}&nbsp; &nbsp; fmt.Println(arrayToString(A, ",")) //1,2,3,4,5,6,7,8,9}要在逗号后包含一个空格,您可以调用arrayToString(A, ", ")或相反地将返回定义为return strings.Trim(strings.Replace(fmt.Sprint(a), " ", delim + " ", -1), "[]")强制将其插入分隔符之后。

牛魔王的故事

我今天刚遇到同样的问题,因为我在标准库上没有找到任何东西,我重新编译了 3 种方法来进行这种转换创建一个字符串并通过使用 strconv.Itoa 对其进行转换来附加数组中的值:func IntToString1() string {&nbsp; &nbsp; a := []int{1, 2, 3, 4, 5}&nbsp; &nbsp; b := ""&nbsp; &nbsp; for _, v := range a {&nbsp; &nbsp; &nbsp; &nbsp; if len(b) > 0 {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b += ","&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; b += strconv.Itoa(v)&nbsp; &nbsp; }&nbsp; &nbsp; return b}创建一个 []string,转换每个数组值,然后从 []string 返回一个连接的字符串:func IntToString2() string {&nbsp; &nbsp; a := []int{1, 2, 3, 4, 5}&nbsp; &nbsp; b := make([]string, len(a))&nbsp; &nbsp; for i, v := range a {&nbsp; &nbsp; &nbsp; &nbsp; b[i] = strconv.Itoa(v)&nbsp; &nbsp; }&nbsp; &nbsp; return strings.Join(b, ",")}将 []int 转换为字符串并替换/修剪值:func IntToString3() string {&nbsp; &nbsp; a := []int{1, 2, 3, 4, 5}&nbsp; &nbsp; return strings.Trim(strings.Replace(fmt.Sprint(a), " ", ",", -1), "[]")}性能因实现而异:BenchmarkIntToString1-12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3000000&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;539 ns/opBenchmarkIntToString2-12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5000000&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;359 ns/opBenchmarkIntToString3-12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1000000&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1162 ns/op就个人而言,我将使用 IntToString2,因此最终函数可能是我项目中的一个 util 包,如下所示:func SplitToString(a []int, sep string) string {&nbsp; &nbsp; if len(a) == 0 {&nbsp; &nbsp; &nbsp; &nbsp; return ""&nbsp; &nbsp; }&nbsp; &nbsp; b := make([]string, len(a))&nbsp; &nbsp; for i, v := range a {&nbsp; &nbsp; &nbsp; &nbsp; b[i] = strconv.Itoa(v)&nbsp; &nbsp; }&nbsp; &nbsp; return strings.Join(b, sep)}

蝴蝶刀刀

你总是可以json.Marshal:data := []int{1,2,3}s, _ := json.Marshal(data)fmt.Println(string(s))// output: [1, 2, 3]fmt.Println(strings.Trim(string(s), "[]"))//output 1,2,3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go