为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
德玛西亚99 2022-01-17 10:07:55
基本上我有[]int{1, 2, 3},我想要一个将它转换为字符串“1,2,3”的单行符(我需要自定义分隔符,有时.,有时,,等等)。下面是我能想到的最好的。在网上搜索,似乎没有找到更好的答案。在大多数语言中,对此都有内置支持,例如:Python:> A = [1, 2, 3]> ", ".join([str(a) for a in A])'1, 2, 3'去:package mainimport (    "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 已经是 [] 字符串时才有效。
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

转换

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 main


import "fmt"

import "strings"


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

    return strings.Trim(strings.Replace(fmt.Sprint(a), " ", delim, -1), "[]")

    //return strings.Trim(strings.Join(strings.Split(fmt.Sprint(a), " "), delim), "[]")

    //return strings.Trim(strings.Join(strings.Fields(fmt.Sprint(a)), delim), "[]")

}


func main() {

    A := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}


    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), "[]")强制将其插入分隔符之后。


查看完整回答
反对 回复 2022-01-17
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

我今天刚遇到同样的问题,因为我在标准库上没有找到任何东西,我重新编译了 3 种方法来进行这种转换


创建一个字符串并通过使用 strconv.Itoa 对其进行转换来附加数组中的值:


func IntToString1() string {

    a := []int{1, 2, 3, 4, 5}

    b := ""

    for _, v := range a {

        if len(b) > 0 {

            b += ","

        }

        b += strconv.Itoa(v)

    }


    return b

}

创建一个 []string,转换每个数组值,然后从 []string 返回一个连接的字符串:


func IntToString2() string {

    a := []int{1, 2, 3, 4, 5}

    b := make([]string, len(a))

    for i, v := range a {

        b[i] = strconv.Itoa(v)

    }


    return strings.Join(b, ",")

}

将 []int 转换为字符串并替换/修剪值:


func IntToString3() string {

    a := []int{1, 2, 3, 4, 5}

    return strings.Trim(strings.Replace(fmt.Sprint(a), " ", ",", -1), "[]")

}

性能因实现而异:


BenchmarkIntToString1-12         3000000           539 ns/op

BenchmarkIntToString2-12         5000000           359 ns/op

BenchmarkIntToString3-12         1000000          1162 ns/op

就个人而言,我将使用 IntToString2,因此最终函数可能是我项目中的一个 util 包,如下所示:


func SplitToString(a []int, sep string) string {

    if len(a) == 0 {

        return ""

    }


    b := make([]string, len(a))

    for i, v := range a {

        b[i] = strconv.Itoa(v)

    }

    return strings.Join(b, sep)

}


查看完整回答
反对 回复 2022-01-17
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

你总是可以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


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号