/
collection.go
76 lines (65 loc) · 1.63 KB
/
collection.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
/*
* Copyright © 2021 - 2023 vity <vityme@icloud.com>.
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file.
*/
package x
import "reflect"
// ArrayEmpty 返回一个空 array
func ArrayEmpty[T any]() []T {
return make([]T, 0)
}
// ArrayContains 检查指定元素是否包含在 array 内
func ArrayContains[T any](array []T, value T) bool {
for _, item := range array {
if reflect.DeepEqual(item, value) {
return true
}
}
return false
}
// SliceEmpty 返回一个空 slice
func SliceEmpty[T any]() []T {
return make([]T, 0)
}
// SliceContains 检查指定元素是否包含在 slice 内
func SliceContains[T any](slice []T, value T) bool {
for _, item := range slice {
if reflect.DeepEqual(value, item) {
return true
}
}
return false
}
// SliceIndex 获取指定元素在slice内的索引
func SliceIndex[T any](slice []T, value T) int {
if size := len(slice); slice != nil && size > 0 {
for idx, item := range slice {
if reflect.DeepEqual(value, item) {
return idx
}
}
}
return -1
}
// SliceInsert 插入元素到指定位置
func SliceInsert[T any](slice []T, index int, value T) []T {
return append(slice[:index], append([]T{value}, slice[index:]...)...)
}
// MapEmpty 返回一个空 map
func MapEmpty[T any]() map[string]T {
return make(map[string]T)
}
// MapKeys 返回键集合
func MapKeys(m map[string]any) []string {
var keys []string
for key := range m {
keys = append(keys, key)
}
return keys
}
// MapContainsKey 是否包含指定键
func MapContainsKey(key string, m map[string]any) bool {
return SliceContains[string](MapKeys(m), key)
}