47 lines
840 B
Go
47 lines
840 B
Go
package laniakea
|
|
|
|
type HashMap[K comparable, V any] map[K]V
|
|
|
|
func NewMapFrom[K comparable, V any](m map[K]V) HashMap[K, V] {
|
|
out := make(HashMap[K, V])
|
|
for k, v := range m {
|
|
out[k] = v
|
|
}
|
|
return out
|
|
}
|
|
func (m HashMap[K, V]) Len() int {
|
|
return len(m)
|
|
}
|
|
func (m HashMap[K, V]) Add(key K, val V) HashMap[K, V] {
|
|
m[key] = val
|
|
return m
|
|
}
|
|
func (m HashMap[K, V]) Remove(key K) HashMap[K, V] {
|
|
delete(m, key)
|
|
return m
|
|
}
|
|
func (m HashMap[K, V]) Get(key K) V {
|
|
return m[key]
|
|
}
|
|
func (m HashMap[K, V]) GetOrDefault(key K, def V) V {
|
|
v, ok := m[key]
|
|
if !ok {
|
|
return def
|
|
}
|
|
return v
|
|
}
|
|
func (m HashMap[K, V]) Contains(key K) bool {
|
|
_, ok := m[key]
|
|
return ok
|
|
}
|
|
func (m HashMap[K, V]) Filter(f func(K, V) bool) HashMap[K, V] {
|
|
out := make(HashMap[K, V])
|
|
for k, v := range m {
|
|
if !f(k, v) {
|
|
continue
|
|
}
|
|
out[k] = v
|
|
}
|
|
return out
|
|
}
|