Moved stuff, added Contains to sliceutils
This commit is contained in:
parent
94e1712122
commit
ae2da5efa5
10 changed files with 21 additions and 43 deletions
57
maputils/mapUtils.go
Normal file
57
maputils/mapUtils.go
Normal file
|
@ -0,0 +1,57 @@
|
|||
package maps
|
||||
|
||||
import "gitlab.com/beckersam/goutils/pkg/sliceutils"
|
||||
|
||||
// MapMap applies a given function to every key-value pair of a map.
|
||||
// The returned map's value type may be different from the type of the inital map's value.
|
||||
func MapMap[K comparable, V any, R any](dic map[K]V, apply func(K, V) R) map[K]R {
|
||||
n := make(map[K]R, len(dic))
|
||||
for key, val := range dic {
|
||||
n[key] = apply(key, val)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
// FilterMap filters a map using a given function.
|
||||
// If the filter function returns true, the key-value pair stays, otherwise it gets removed.
|
||||
func FilterMap[K comparable, V any](dic map[K]V, filter func(K, V) bool) map[K]V {
|
||||
n := make(map[K]V, 0)
|
||||
for key, val := range dic {
|
||||
if filter(key, val) {
|
||||
n[key] = val
|
||||
}
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
// KeysFromMap creates a slice of keys that match the keys in a given map.
|
||||
func KeysFromMap[K comparable, V any](m map[K]V) []K {
|
||||
keys := make([]K, len(m))
|
||||
|
||||
i := 0
|
||||
for k := range m {
|
||||
keys[i] = k
|
||||
i++
|
||||
}
|
||||
return keys
|
||||
}
|
||||
|
||||
// CompareMap compares two maps for key-val equality (If both maps have the same key-value pairs).
|
||||
func CompareMap[K, V comparable](a, b map[K]V) bool {
|
||||
if len(a) != len(b) {
|
||||
return false
|
||||
}
|
||||
// Check if both maps have the same keys
|
||||
if !sliceutils.CompareUnorderedSlice(KeysFromMap(a), KeysFromMap(b)) {
|
||||
return false
|
||||
}
|
||||
|
||||
// Then compare key-value pairs
|
||||
for k, v := range a {
|
||||
val, ok := b[k]
|
||||
if !(ok && val == v) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue