-
Notifications
You must be signed in to change notification settings - Fork 0
/
helpers.go
71 lines (60 loc) · 1.19 KB
/
helpers.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
package botform
import (
"golang.org/x/text/collate"
"golang.org/x/text/language"
)
func ReverseSlice[S ~[]E, E any](s S) {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
}
type SortedStringMap map[string]string
func (ssm SortedStringMap) Range(cb func(k, v string) bool, byValue bool) {
keys := make([]string, 0, len(ssm))
valueIndex := map[string]string{}
if byValue {
for k, v := range ssm {
keys = append(keys, v)
valueIndex[v] = k
}
} else {
for k := range ssm {
keys = append(keys, k)
}
}
c := collate.New(language.Und, collate.IgnoreCase)
c.SortStrings(keys)
for _, mapKey := range keys {
if byValue {
k := valueIndex[mapKey]
ok := cb(k, mapKey)
if !ok {
break
}
} else {
ok := cb(mapKey, ssm[mapKey])
if !ok {
break
}
}
}
}
func IsEqualSST(ssm1 SortedStringMap, ssm2 SortedStringMap) bool {
s1 := ""
ssm1.Range(func(k, v string) bool {
s1 = s1 + v
return true
}, false)
s2 := ""
ssm2.Range(func(k, v string) bool {
s2 = s2 + v
return true
}, false)
if s1 == s2 {
return true
}
return false
}
func RemoveIndex(s []string, index int) []string {
return append(s[:index], s[index+1:]...)
}