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

将 [][]字符串转换为 []字节

将 [][]字符串转换为 []字节

Go
GCT1015 2022-08-24 15:45:33
我试图将2D字符串切片转换为1d字节切片,但它非常慢。有没有更好的方法可以做到?func TwoDstringsliceToOneByteSlice(csvRecords [][]string) []byte {    var singleSlice []byte    for _, record := range csvRecords {    for _, item := range record {        singleSlice = append(singleSlice, []byte(item)...)    }    }    return singleSlice}
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

示例中的每个参数首先复制其参数 — a 和 a 之间的类型转换(反之亦然)是 Go 中为数不多的复制数据的位置之一 — 然后很可能复制目标切片,以便为要追加的内容在其中创建更多空间。appendstring[]byte


改善这一点的一个明显方法是这样的


func TwoDstringsliceToOneByteSlice(csvRecords [][]string) []byte {

  var buf bytes.Buffer

  for _, record := range csvRecords {

    for _, item := range record {

        buf.WriteString(item)

    }

  }

  return buf.Bytes()

}

请注意,如果您打算将结果用于“读取” - 例如使用此类数据作为HTTP POST请求的有效负载的情况,则可以立即使用 - 而无需从中获取字节切片 - 作为实现。bytes.Bufferbytes.Bufferio.Reader


第二个优化是首先计算所有字符串的总长度,然后预先分配目标切片。

然后,您可以在写信之前调用它,或者放弃并使用子切片和(但我建议不要这样做 - 到现在为止)。.Grow()bytes.Bufferbytes.Buffercopy


...但是,正如@JimB正确指出的那样,我们知道您如何衡量性能,因此很难合理地猜测。


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信