mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-04 00:10:25 +08:00
58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package collx
|
||
|
||
import "mayfly-go/pkg/utils/anyx"
|
||
|
||
// M is a shortcut for map[string]any
|
||
type M map[string]any
|
||
|
||
// 将偶数个元素转为对应的M (map[string]any)
|
||
//
|
||
// 偶数索引为key,奇数为value
|
||
func Kvs(elements ...any) M {
|
||
myMap := make(map[string]any)
|
||
|
||
for i := 0; i < len(elements); i += 2 {
|
||
key := anyx.ToString(elements[i])
|
||
if i+1 < len(elements) {
|
||
value := elements[i+1]
|
||
myMap[key] = value
|
||
} else {
|
||
myMap[key] = nil
|
||
}
|
||
}
|
||
return myMap
|
||
}
|
||
|
||
// Keys returns the keys of the map m.
|
||
// The keys will be in an indeterminate order.
|
||
func MapKeys[M ~map[K]V, K comparable, V any](m M) []K {
|
||
r := make([]K, 0, len(m))
|
||
for k := range m {
|
||
r = append(r, k)
|
||
}
|
||
return r
|
||
}
|
||
|
||
// Values returns the values of the map m.
|
||
// The values will be in an indeterminate order.
|
||
func MapValues[M ~map[K]V, K comparable, V any](m M) []V {
|
||
r := make([]V, 0, len(m))
|
||
for _, v := range m {
|
||
r = append(r, v)
|
||
}
|
||
return r
|
||
}
|
||
|
||
// MapMerge maps merge, 若存在重复的key,则以最后的map值为准
|
||
func MapMerge[M ~map[K]V, K comparable, V any](maps ...M) M {
|
||
mergedMap := make(M)
|
||
|
||
for _, m := range maps {
|
||
for k, v := range m {
|
||
mergedMap[k] = v
|
||
}
|
||
}
|
||
|
||
return mergedMap
|
||
}
|