How to convert a two dimension array into a one dimension array in GO?

huangapple go评论82阅读模式
英文:

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 是 &quot;123&quot;, &quot;456&quot;, &quot;789&quot;,那么 result 应该是 &quot;123456789&quot;

英文:

Here are two data structures

result []byte
chunk  [][]byte

"chunk" is initialized as follows

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

How can I concatenate chunks into to result[]?

Example

If chunks is &quot;123&quot;, &quot;456&quot;, &quot;789&quot;, then result should be &quot;123456789&quot;

答案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 &quot;bytes&quot;.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.

huangapple
  • 本文由 发表于 2017年7月25日 11:36:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/45293485.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定