添加[]字节追加slice []字节

问题描述 投票:0回答:1

我开始学习GO的语言,我不太明白,也许我只是感到困惑和厌倦。这是我的代码,有一个结果数组(来自编码字符串,大小为2139614个元素)。我需要解码它们并进一步使用它们。但是当我运行迭代时,结果是两倍大,前半部分是完全空的。因此,我制作一个切片并添加所需的范围。

为什么会这样?

可能更容易立即解码结果并重新记录它,但我不知道该怎么做,好吧)))

也许有一种完全不同的方式,作为初学者,我还不知道

        result := []string{}

    for i, _ := range input {
        result = append(result, i)
    }
    sort.Strings(result)

    rips := make([][]byte, 2139614)

    for _, i := range result {
        c := Decode(i)
        c = c[1:37]
        rips = append(rips, c)
    }
        //len(result) == 2139614

    for i := 2139610; i < 2139700; i++ {
        fmt.Println(i, rips[i])
    }

    resultrips := rips[2139614:]
    for _,i := range resultrips {
        fmt.Println(i)
    }

    fmt.Println("All write: ", len(resultrips))

这个问题:如果我需要一个字节数组的数组,我会这样做(我这样做是为了不做太多的工作,并将检查字节值,因为没有任何编码)???

rips := make([][]byte, 2139614) // array [] byte

最后,我需要一个C ++中集合类型的数组来检查我的集合中是否有一个元素在C ++中它是代码:if (resultrips.count > 0) { ... }

go byte slice
1个回答
2
投票

当你写:

make([][]byte, 2139614)

这会创建一个长度和容量等于2139614的切片。当你将append切换到切片时,它总是追加到最后一个元素之后,从而增加了长度。如果要预先分配一个大切片以便可以附加到其中,则需要指定0的长度:

make([][]byte, 0, 2139614)

这预先分配了2139614个元素,但是长度为0,随后的append调用将从切片的开头开始;在第一次附加之后它将具有1的长度,并且它不需要增加其容量。

Go of Go:https://tour.golang.org/moretypes/13涵盖了长度与容量的关系

基于问题文本的快速说明 - 请记住切片和数组不是一回事。数组具有编译时固定长度,其容量与其长度同义。切片由数组支持,但具有运行时动态独立的长度和容量。

© www.soinside.com 2019 - 2024. All rights reserved.