From 3dc3fbb0f2048274b4b91f7795c0c4d62ab5ab9b Mon Sep 17 00:00:00 2001 From: charlie <3140647@qq.com> Date: Thu, 12 May 2022 10:03:07 +0800 Subject: [PATCH] map join --- maps/map.go | 17 ++++++++++++++++- maps/sort_map.go | 14 +------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/maps/map.go b/maps/map.go index 20a80e7..aa688f5 100644 --- a/maps/map.go +++ b/maps/map.go @@ -1,6 +1,10 @@ package maps -import "golang.org/x/exp/constraints" +import ( + "strings" + + "golang.org/x/exp/constraints" +) type Map[K constraints.Ordered, V any] interface { Set(key K, value V) // 设置值 @@ -32,3 +36,14 @@ func Merge[K comparable, V any](mm ...map[K]V) map[K]V { return ret } + +// 按照键值生成字符串 +func Join[K constraints.Ordered, V any](m Map[K, V], sep string, f func(k K, v V) string) string { + slice := make([]string, 0, m.Count()) + for _, k := range m.Keys() { + v, _ := m.Get(k) + slice = append(slice, f(k, v)) + } + + return strings.Join(slice, sep) +} diff --git a/maps/sort_map.go b/maps/sort_map.go index d7938bb..6b2c7f2 100644 --- a/maps/sort_map.go +++ b/maps/sort_map.go @@ -2,7 +2,6 @@ package maps import ( "fmt" - "strings" "golang.org/x/exp/constraints" "golang.org/x/exp/slices" @@ -32,7 +31,6 @@ func NewSortedMap[K constraints.Ordered, V any](maps ...map[K]V) *sorted_map[K, } func NewSortedByMap[K constraints.Ordered, V any](m Map[K, V]) *sorted_map[K, V] { - return &sorted_map[K, V]{maps: m, keys: m.Keys()} } @@ -94,16 +92,6 @@ func (m *sorted_map[K, V]) Exist(key K) bool { return m.Exist(key) } -func (m *sorted_map[K, V]) Join(sep string, f func(k K, v V) string) string { - slice := make([]string, 0, m.maps.Count()) - for _, k := range m.keys { - v, _ := m.maps.Get(k) - slice = append(slice, f(k, v)) - } - - return strings.Join(slice, sep) -} - func (m *sorted_map[K, V]) Keys() []K { return m.keys } @@ -123,7 +111,7 @@ func (s *sorted_map[K, V]) ToMap() map[K]V { } func (m *sorted_map[K, V]) String() string { - return fmt.Sprintf("map[%s]", m.Join(" ", func(k K, v V) string { + return fmt.Sprintf("map[%s]", Join[K, V](m, " ", func(k K, v V) string { return fmt.Sprintf("%v:%v", k, v) })) }