6
我有一個切片,裏面有大約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中切片?
Ahhhhhhh這就是我失蹤了。我一直試圖遍歷一個有限的範圍,而不是通過塊長度迭代。我花了8個小時試圖弄清楚如何讓我的工作,哈哈。感謝您的回答,超級有用。 – mxplusb
你看起來被分開的長度中的一個偏離了。例如,'numCPU = 3;日誌=日誌[:8]; chunkSize:= len(日誌)/ numCPU;如果chunkSize == 0 {chunkSize = 1};對於3個cpus和8個日誌,分爲4個而不是3個:http://play.golang.org/p/EdhiclVR0q。對於'chunkSize',寫'chunkSize:=(len(logs)+ numCPU-1)/ numCPU;':http://play.golang.org/p/xDyFXt45Fz。 – peterSO
@peterSO:謝謝,剛從原版複製而來,並沒有想到要檢查。 – JimB