diff --git a/mapsx/funcs.go b/mapsx/funcs.go index 9d0d1df..ff91c94 100644 --- a/mapsx/funcs.go +++ b/mapsx/funcs.go @@ -26,10 +26,62 @@ func GetOk[Map ~map[K]V, K comparable, V any](m Map, k K, v V) (val V, found boo } /* - Must, unlike [Get] or [GetOk], requires that `k` be in map `m`. +ListKeys returns map `m`'s keys as a slice (unlike [maps.Keys], +which returns an iterator via [iter.Seq]). - A panic with error [ErrNotFound] will be raised if `k` is not present. - Otherwise the found value will be returned. +ListKeys will return nil if `m` is nil, and an empty slice +if `m` is non-nil but empty. + +The ordering of `mapKeys` is unpredictable as maps are unsorted +and no explicit sorting is performed. +*/ +func ListKeys[Map ~map[K]V, K comparable, V any](m Map) (mapKeys []K) { + + var k K + + if m == nil { + return + } + mapKeys = make([]K, 0, len(m)) + + for k, _ = range m { + mapKeys = append(mapKeys, k) + } + + return +} + +/* +ListValues returns map `m`'s values as a slice (unlike [maps.Values], +which returns an iterator via [iter.Seq]). + +ListValues will return nil if `m` is nil, and an empty slice +if `m` is non-nil but empty. + +The ordering of `mapVals` is unpredictable as maps are unsorted +and no explicit sorting is performed. +*/ +func ListValues[Map ~map[K]V, K comparable, V any](m Map) (mapVals []V) { + + var v V + + if m == nil { + return + } + mapVals = make([]V, 0, len(m)) + + for _, v = range m { + mapVals = append(mapVals, v) + } + + return +} + +/* +Must, unlike [Get] or [GetOk], requires that `k` be in map `m`. + +A panic with error [ErrNotFound] will be raised if `k` is not present. +Otherwise the found value will be returned. */ func Must[Map ~map[K]V, K comparable, V any](m Map, k K) (val V) { diff --git a/tplx/sprigx/README.html b/tplx/sprigx/README.html index 82cfeee..20df275 100644 --- a/tplx/sprigx/README.html +++ b/tplx/sprigx/README.html @@ -636,7 +636,7 @@ pre.rouge .gs {