go - 添加 []bytes 追加 slice []bytes

标签 go byte slice

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

为什么会这样?

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

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

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

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

最佳答案

当你写的时候:

make([][]byte, 2139614)

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

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

这预分配了 2139614 个元素,但长度为 0,后续的 append 调用将从 slice 的开始开始;在第一次附加后,它的长度将为 1,并且不需要增加其容量。

围棋之旅中介绍了长度与容量:https://tour.golang.org/moretypes/13

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

关于go - 添加 []bytes 追加 slice []bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765601/

相关文章:

c# - 如何在 C# 中使用字节常量作为 switch case?

c++ - 如何使用 char 数据类型作为数字而不是字符?

c# - 尝试在C#中异步读取非结束字节流

performance - 代码顺序和性能

go - 使用Go显示代码而不是请求GCP响应的代码

json - 在 Go 中加速 JSON 解析

python - 在 Python 中对字符串进行切片时如何使用变量作为索引?

arrays - 这种类型的 golang 字符串 slice 会在底层字节数组中泄漏内存吗?

json - 在golang中编辑继承属性的标签?

go - 如何将 FuncMap 添加到 golang 中已解析的模板中