我有一个包含约 210 万个日志字符串的切片,我想创建一个切片,其中的字符串尽可能均匀分布。
这是我到目前为止所拥有的:
// logs is a slice with ~2.1 million strings in it.
var divided = make([][]string, 0)
NumCPU := runtime.NumCPU()
ChunkSize := len(logs) / NumCPU
for i := 0; i < NumCPU; i++ {
temp := make([]string, 0)
idx := i * ChunkSize
end := i * ChunkSize + ChunkSize
for x := range logs[idx:end] {
temp = append(temp, logs[x])
}
if i == NumCPU {
for x := range logs[idx:] {
temp = append(temp, logs[x])
}
}
divided = append(divided, temp)
}
idx := i * ChunkSize
将为我提供 --- 索引的当前“块开始”,以及 logs
索引和 end := i * ChunkSize + ChunkSize
将给我“结束块”该块的范围。我找不到任何关于如何在 Go 中分块/拆分切片或在有限范围内迭代的文档或示例,所以这就是我想出的。但是,它只是多次复制第一个块,所以它不起作用。
我如何(尽可能均匀地)在 Go 中分块切片?
原文由 SiennaD. 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不需要制作新的切片,只需将
logs
的切片附加到divided
切片。http://play.golang.org/p/vyihJZlDVy