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

我试图将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

}


GCT1015
浏览 103回答 1
1回答

MM们

示例中的每个参数首先复制其参数 — 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正确指出的那样,我们知道您如何衡量性能,因此很难合理地猜测。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go