aboutsummaryrefslogtreecommitdiffstats
path: root/library/go/slices/chunk.go
blob: 2a69eb475d2068d6230f8481b69a3df46102b206 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package slices

func Chunk[T any](slice []T, chunkSize int) [][]T {
	if chunkSize < 1 {
		return [][]T{slice}
	}
	chunksCount := len(slice) / chunkSize
	if len(slice)%chunkSize > 0 {
		chunksCount++
	}
	chunks := make([][]T, chunksCount)

	for i := range chunks {
		if len(slice) < chunkSize {
			chunkSize = len(slice)
		}
		chunks[i] = slice[0:chunkSize]
		slice = slice[chunkSize:]
	}
	return chunks
}