【发布时间】:2016-05-12 19:17:33
【问题描述】:
我有一个切片,其中包含约 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 中分块?
【问题讨论】: