英文:
How to convert a two dimension array into a one dimension array in GO?
问题
这里有两个数据结构:
result []byte
chunk [][]byte
"chunk" 的初始化如下:
chunk := make([][]byte, 3)
for i := 0 ; i < 5; i++ {
chunk[i] = data // data 是一个字节数组
}
如何将 chunks
连接成 result[]
?
示例:
如果 chunks 是 "123", "456", "789"
,那么 result 应该是 "123456789"
。
英文:
Here are two data structures
result []byte
chunk [][]byte
"chunk" is initialized as follows
chunk := make([][]byte, 3)
for i := 0 ; i < 5; i++ {
chunk[i] = data //data is a byte array
}
How can I concatenate chunks
into to result[]
?
Example
If chunks is "123", "456", "789"
, then result should be "123456789"
答案1
得分: 4
简单。
l := 0
for _, v := range chunks {
l += len(v)
}
result := make([]byte, 0, l)
for _, v := range chunks {
result = append(result, v...)
}
第一个循环将所有长度相加,然后分配新的切片,然后使用另一个循环将旧的切片复制到新的切片中。
虽然使用bytes
包中的函数可以更简单地处理这种特殊情况,但这个解决方案适用于任何类型的切片。
英文:
Simple.
l := 0
for _, v := range chunks {
l += len(v)
}
result := make([]byte, 0, l)
for _, v := range chunks {
result = append(result, v...)
}
The first loop adds up all the lengths, the new slice is allocated, and then another loop is used to copy the old slices into the new one.
While there is a simpler way to handle this particular case using functions from the bytes
package, this solution will work with slices of any type.
答案2
得分: 3
你可以使用标准库中的"bytes".Join
函数:
result := bytes.Join(chunks, nil)
第一个参数是你的切片的切片([][]byte
),第二个参数是分隔符(也称为粘合剂)。在你的情况下,分隔符是一个空的字节切片(nil
也可以使用)。
在playground中查看示例:https://play.golang.org/p/8pquRk7PDo。
英文:
You can use the "bytes".Join
function from the standard library:
result := bytes.Join(chunks, nil)
First argument is your slice of slices ([][]byte
), second argument is the separator (aka glue). In your case, the separator is an empty slice of bytes (nil
works as well).
In the playground: https://play.golang.org/p/8pquRk7PDo.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论