From d5876775c8ba6237cc0dae3b981f7751feac172f Mon Sep 17 00:00:00 2001 From: Samuel Berthe Date: Sun, 26 Jan 2025 19:51:43 +0100 Subject: [PATCH] feat: faster ChunkEntries --- map.go | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/map.go b/map.go index 4b771859..b1959e2c 100644 --- a/map.go +++ b/map.go @@ -254,34 +254,24 @@ func ChunkEntries[K comparable, V any](m map[K]V, size int) []map[K]V { panic("The chunk size must be greater than 0") } - keys := make([]K, 0, len(m)) - for key := range m { - keys = append(keys, key) - } - - if len(keys) == 0 { + count := len(m) + if count == 0 { return []map[K]V{} } - chunksNum := len(keys) / size - if len(keys)%size != 0 { + chunksNum := count / size + if count%size != 0 { chunksNum += 1 } result := make([]map[K]V, 0, chunksNum) - for i := 0; i < chunksNum; i++ { - start := i * size - end := (i + 1) * size - if end > len(keys) { - end = len(keys) + for k, v := range m { + if len(result) == 0 || len(result[len(result)-1]) == size { + result = append(result, make(map[K]V, size)) } - chunk := make(map[K]V) - for _, key := range keys[start:end] { - chunk[key] = m[key] - } - result = append(result, chunk) + result[len(result)-1][k] = v } return result