ADDED:
* mapsx:
** ListKeys()
** ListValues()
This commit is contained in:
brent saner
2026-07-15 19:04:00 -04:00
parent 72af113204
commit 5108b09df5
3 changed files with 57 additions and 5 deletions
+55 -3
View File
@@ -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) {