map.go
1.25 KB
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
package utmap
import (
"apigame/util/uttype"
"math/rand"
)
// Keys Keys切片
func Keys[T1 comparable, T2 any](dict map[T1]T2) []T1 {
list := make([]T1, 0)
for k, _ := range dict {
list = append(list, k)
}
return list
}
// Values Values切片
func Values[T1 comparable, T2 any](dict map[T1]T2) []T2 {
list := make([]T2, 0)
for _, v := range dict {
list = append(list, v)
}
return list
}
// ContainValue 值等于
func ContainValue[T1 comparable, T2 comparable](dict map[T1]T2, value T2) bool {
for _, v := range dict {
if v == value {
return true
}
}
return false
}
// ContainValueEquals 值等于
func ContainValueEquals[T1 comparable, T2 uttype.EqualAble](dict map[T1]T2, value T2) bool {
for _, v := range dict {
if v.Equals(value) {
return true
}
}
return false
}
// ContainValueBy 值符合
func ContainValueBy[T1 comparable, T2 any](dict map[T1]T2, value T2, equals func(v1 T2, v2 T2) bool) bool {
for _, v := range dict {
if equals(v, value) {
return true
}
}
return false
}
// RandomOne 随机一个值
func RandomOne[T1 comparable, T2 any](dict map[T1]T2) T2 {
if len(dict) <= 0 {
return *new(T2)
}
list := make([]T1, 0)
for i, _ := range dict {
list = append(list, i)
}
return dict[list[rand.Intn(len(list))]]
}