Skip to content

Commit 2cd85e8

Browse files
committed
mapex.Keys(), mapex.Values()
1 parent 75b9606 commit 2cd85e8

File tree

4 files changed

+84
-3
lines changed

4 files changed

+84
-3
lines changed

README.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,29 @@ s2 := s.Clone()
126126
assert.True(t, s.Equal(s2))
127127
```
128128

129-
## `ifop`
129+
## `ifop`
130130
ifop是弥补下golang没有三目运算符,使用函数模拟
131131

132132
```go
133133
// 如果该值不为0, 返回原来的值,否则默认值
134134
val = IfElse(len(val) != 0, val, "default")
135135
```
136+
## 十、`mapex`
137+
薄薄一层包装,增加标准库map的接口
138+
* mapex.Keys()
139+
```go
140+
m := make(map[string]string)
141+
m["a"] = "1"
142+
m["b"] = "2"
143+
m["c"] = "3"
144+
get := mapex.Keys(m)// 返回map的所有key
145+
146+
```
147+
* mapex.Values()
148+
```go
149+
m := make(map[string]string)
150+
m["a"] = "1"
151+
m["b"] = "2"
152+
m["c"] = "3"
153+
get := Values(m)
154+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
module github.com/guonaihong/gstl
22

3-
go 1.18
3+
go 1.19
44

55
require (
6+
github.com/cespare/xxhash/v2 v2.1.2
67
github.com/stretchr/testify v1.7.1
78
golang.org/x/exp v0.0.0-20220328175248-053ad81199eb
89
)
910

1011
require (
11-
github.com/cespare/xxhash/v2 v2.1.2 // indirect
1212
github.com/davecgh/go-spew v1.1.0 // indirect
1313
github.com/pmezard/go-difflib v1.0.0 // indirect
1414
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect

mapex/mapex.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package mapex
2+
3+
type Map[K comparable, V any] map[K]V
4+
5+
func Keys[K comparable, V any](m map[K]V) (keys []K) {
6+
return Map[K, V](m).Keys()
7+
}
8+
9+
func Values[K comparable, V any](m map[K]V) (values []V) {
10+
return Map[K, V](m).Values()
11+
}
12+
13+
func (m Map[K, V]) Keys() (keys []K) {
14+
keys = make([]K, 0, len(m))
15+
for k := range m {
16+
keys = append(keys, k)
17+
}
18+
return
19+
}
20+
21+
func (m Map[K, V]) Values() (values []V) {
22+
values = make([]V, 0, len(m))
23+
for _, v := range m {
24+
values = append(values, v)
25+
}
26+
return
27+
}

mapex/mapex_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package mapex
2+
3+
import (
4+
"sort"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func Test_Keys(t *testing.T) {
11+
m := make(map[string]string)
12+
m["a"] = "1"
13+
m["b"] = "2"
14+
m["c"] = "3"
15+
get := Keys(m)
16+
sort.Strings(get)
17+
assert.Equal(t, get, []string{"a", "b", "c"})
18+
get = Map[string, string](m).Keys()
19+
sort.Strings(get)
20+
assert.Equal(t, get, []string{"a", "b", "c"})
21+
}
22+
23+
func Test_Values(t *testing.T) {
24+
m := make(map[string]string)
25+
m["a"] = "1"
26+
m["b"] = "2"
27+
m["c"] = "3"
28+
get := Values(m)
29+
sort.Strings(get)
30+
assert.Equal(t, get, []string{"1", "2", "3"})
31+
32+
get = Map[string, string](m).Values()
33+
sort.Strings(get)
34+
assert.Equal(t, get, []string{"1", "2", "3"})
35+
}

0 commit comments

Comments
 (0)