From ecf325a06c84218b07cca2432c04ef19f0626fa1 Mon Sep 17 00:00:00 2001 From: donutloop Date: Tue, 19 Jul 2022 09:04:19 +0200 Subject: [PATCH] maputil: preallocate len and cap for keys and values slice (#41) Length of keys and values is know in advance, use this knowledge to preallocate memory. Space usage increases by const factor --- maputil/map.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/maputil/map.go b/maputil/map.go index b3d9e8c..09d19bf 100644 --- a/maputil/map.go +++ b/maputil/map.go @@ -8,10 +8,12 @@ import "reflect" // Keys returns a slice of the map's keys func Keys[K comparable, V any](m map[K]V) []K { - keys := make([]K, 0, len(m)) + keys := make([]K, len(m)) + var i int for k := range m { - keys = append(keys, k) + keys[i] = k + i++ } return keys @@ -19,10 +21,12 @@ func Keys[K comparable, V any](m map[K]V) []K { // Values returns a slice of the map's values func Values[K comparable, V any](m map[K]V) []V { - values := make([]V, 0, len(m)) + values := make([]V, len(m)) + var i int for _, v := range m { - values = append(values, v) + values[i] = v + i++ } return values