我有一个包含大约210万个日志(log)字符串的切片,我想创建一个字符串尽可能均匀分布的切片.
以下是我目前掌握的情况:
// 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中分块/拆分切片或在有限范围内迭代的文档或示例,所以这就是我想出来的.但是,它只复制第一个块多次,所以它不起作用.
我如何(尽可能均匀地)在围棋中切块?