【问题标题】:Add []bytes append slice []bytes添加 []bytes 追加切片 []bytes
【发布时间】:2019-09-09 22:42:53
【问题描述】:

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

为什么会这样?

直接解码结果重新录制可能会更容易,但我不知道怎么做,好吧)))

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

        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) //数组[]字节

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

【问题讨论】:

    标签: go byte slice


    【解决方案1】:

    当你写作时:

    make([][]byte, 2139614)
    

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

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

    这预分配了 2139614 个元素,但长度为 0,后续的 append 调用将从切片的开头开始;第一次追加后,它的长度为1,不需要增加容量。

    Tour of Go 中介绍了长度与容量:https://tour.golang.org/moretypes/13

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

    【讨论】:

    • 谢谢!!真的你是对的!我以为 0 是占位符。确定信号表明您需要放松一下!
    猜你喜欢
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多