如何在GO中将二维数组转换为一维数组?

时间:2017-07-25 03:36:43

标签: go slice

这是两个数据结构

result []byte
chunk  [][]byte

“chunk”初始化如下

chunk := make([][]byte, 3)
for i := 0 ; i < 5; i++ {
      chunk[i] = data //data is a byte array
}

如何将chunks连接到result[]

实施例

如果块是"123", "456", "789",则结果应为"123456789"

2 个答案:

答案 0 :(得分:4)

简单。

l := 0
for _, v := range chunks {
    l += len(v)
}
result := make([]byte, 0, l)
for _, v := range chunks {
    result = append(result, v...)
}

第一个循环将所有长度相加,分配新切片,然后使用另一个循环将旧切片复制到新切片中。

虽然有一种更简单的方法可以使用bytes包中的函数来处理这种特殊情况,但此解决方案可以使用任何类型的切片。

答案 1 :(得分:3)

您可以使用标准库中的"bytes".Join函数:

result := bytes.Join(chunks, nil)

第一个参数是切片([][]byte),第二个参数是分隔符(也就是胶水)。在您的情况下,分隔符是一个空的字节切片(nil也可以)。

在操场上:https://play.golang.org/p/8pquRk7PDo