我开始学习 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/