github.com/kazu/loncha@v0.6.3/map.go (about) 1 package loncha 2 3 func Keys[K comparable, V any](m map[K]V) (keys []K) { 4 5 if m == nil { 6 return nil 7 } 8 9 keys = make([]K, 0, len(m)) 10 for k, _ := range m { 11 keys = append(keys, k) 12 } 13 return 14 } 15 16 func Values[K comparable, V any](m map[K]V) (values []V) { 17 18 if m == nil { 19 return nil 20 } 21 22 values = make([]V, 0, len(m)) 23 for _, v := range m { 24 values = append(values, v) 25 } 26 return 27 } 28 29 // SelectMap ... rewrite map each key, value pair. 30 func SelectMap[K comparable, V any](m map[K]V, fn func(k K, v V) (K, V, bool)) (result map[K]V) { 31 result = make(map[K]V) 32 for k, v := range m { 33 34 nk, nv, remove := fn(k, v) 35 if remove { 36 continue 37 } 38 result[nk] = nv 39 } 40 return 41 }