Skip to content

Commit

Permalink
feat(maps): 1.21 no keys/values
Browse files Browse the repository at this point in the history
  • Loading branch information
leaxoy committed Aug 14, 2023
1 parent 9ad58eb commit 6fe2d7f
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 34 deletions.
31 changes: 28 additions & 3 deletions maps/maps.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,35 @@ package maps

import "github.com/go-board/std/tuple"

type MapEntry[K, V any] struct {
inner tuple.Pair[K, V]
}
type MapEntry[K, V any] struct{ inner tuple.Pair[K, V] }

func (e MapEntry[K, V]) Key() K { return e.inner.First }
func (e MapEntry[K, V]) Value() V { return e.inner.Second }

func entry[K, V any](key K, value V) MapEntry[K, V] {
return MapEntry[K, V]{inner: tuple.PairOf(key, value)}
}

func Entries[K comparable, V any, M ~map[K]V](m M) []MapEntry[K, V] {
entries := make([]MapEntry[K, V], 0, len(m))
for k, v := range m {
entries = append(entries, entry(k, v))
}
return entries
}

func Keys[K comparable, V any, M ~map[K]V](m M) []K {
ks := make([]K, 0, len(m))
for k := range m {
ks = append(ks, k)
}
return ks
}

func Values[K comparable, V any, M ~map[K]V](m M) []V {
vs := make([]V, 0, len(m))
for _, v := range m {
vs = append(vs, v)
}
return vs
}
16 changes: 0 additions & 16 deletions maps/maps_1_20.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,6 @@ func Entries[K comparable, V any, M ~map[K]V](m M) []MapEntry[K, V] {
return es
}

func Keys[K comparable, V any, M ~map[K]V](m M) []K {
ks := make([]K, 0, len(m))
for k := range m {
ks = append(ks, k)
}
return ks
}

func Values[K comparable, V any, M ~map[K]V](m M) []V {
vs := make([]V, 0, len(m))
for _, v := range m {
vs = append(vs, v)
}
return vs
}

func Clone[K comparable, V any, M ~map[K]V](m M) M {
r := make(M)
for k, v := range m {
Expand Down
15 changes: 0 additions & 15 deletions maps/maps_1_21.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,6 @@ package maps

import "maps"

func Entries[K comparable, V any, M ~map[K]V](m M) []MapEntry[K, V] {
es := make([]MapEntry[K, V], 0, len(m))
for k, v := range m {
es = append(es, entry(k, v))
}
return es
}

func Keys[K comparable, V any, M ~map[K]V](m M) []K {
return maps.Keys(m)
}

func Values[K comparable, V any, M ~map[K]V](m M) []V {
return maps.Values(m)
}

func Equal[K comparable, V comparable, M1 ~map[K]V, M2 ~map[K]V](lhs M1, rhs M2) bool {
return maps.Equal(lhs, rhs)
Expand Down

0 comments on commit 6fe2d7f

Please sign in to comment.