forked from gookit/goutil
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsmap.go
152 lines (130 loc) · 2.71 KB
/
smap.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package maputil
import (
"github.com/gookit/goutil/mathutil"
"github.com/gookit/goutil/strutil"
)
// SMap is alias of map[string]string
type SMap map[string]string
// IsEmpty of the data map
func (m SMap) IsEmpty() bool {
return len(m) == 0
}
// Has key on the data map
func (m SMap) Has(key string) bool {
_, ok := m[key]
return ok
}
// HasValue on the data map
func (m SMap) HasValue(val string) bool {
for _, v := range m {
if v == val {
return true
}
}
return false
}
// Load data to the map
func (m SMap) Load(data map[string]string) {
for k, v := range data {
m[k] = v
}
}
// Set value to the data map
func (m SMap) Set(key string, val any) {
m[key] = strutil.MustString(val)
}
// Value get from the data map
func (m SMap) Value(key string) (string, bool) {
val, ok := m[key]
return val, ok
}
// Default get value by key. if not found, return defVal
func (m SMap) Default(key, defVal string) string {
if val, ok := m[key]; ok {
return val
}
return defVal
}
// Get value by key
func (m SMap) Get(key string) string {
return m[key]
}
// Int value get
func (m SMap) Int(key string) int {
if val, ok := m[key]; ok {
return mathutil.QuietInt(val)
}
return 0
}
// Int64 value get
func (m SMap) Int64(key string) int64 {
if val, ok := m[key]; ok {
return mathutil.QuietInt64(val)
}
return 0
}
// Str value get
func (m SMap) Str(key string) string {
return m[key]
}
// Bool value get
func (m SMap) Bool(key string) bool {
if val, ok := m[key]; ok {
return strutil.QuietBool(val)
}
return false
}
// Ints value to []int
func (m SMap) Ints(key string) []int {
if val, ok := m[key]; ok {
return strutil.Ints(val, ValSepStr)
}
return nil
}
// Strings value to []string
func (m SMap) Strings(key string) (ss []string) {
if val, ok := m[key]; ok {
return strutil.ToSlice(val, ValSepStr)
}
return
}
// IfExist key, then call the fn with value.
func (m SMap) IfExist(key string, fn func(val string)) {
if val, ok := m[key]; ok {
fn(val)
}
}
// IfValid value is not empty, then call the fn
func (m SMap) IfValid(key string, fn func(val string)) {
if val, ok := m[key]; ok && val != "" {
fn(val)
}
}
// Keys of the string-map
func (m SMap) Keys() []string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
return keys
}
// Values of the string-map
func (m SMap) Values() []string {
ss := make([]string, 0, len(m))
for _, v := range m {
ss = append(ss, v)
}
return ss
}
// ToKVPairs slice convert. eg: {k1:v1,k2:v2} => {k1,v1,k2,v2}
func (m SMap) ToKVPairs() []string {
pairs := make([]string, 0, len(m)*2)
for k, v := range m {
pairs = append(pairs, k, v)
}
return pairs
}
// String data to string
func (m SMap) String() string {
return ToString2(m)
}