54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package tools
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
|
|
"github.com/mozillazg/go-pinyin"
|
|
"github.com/samber/lo"
|
|
)
|
|
|
|
func ContainsInsensitive(element string, slice []string) bool {
|
|
lowercasedElement := strings.TrimSpace(strings.ToLower(element))
|
|
return lo.Contains(slice, lowercasedElement)
|
|
}
|
|
|
|
func PinyinAbbr(source string) string {
|
|
abbr := pinyin.Pinyin(source, pinyin.NewArgs())
|
|
var abbrCollect = make([]string, 0)
|
|
for _, a := range abbr {
|
|
abbrCollect = append(abbrCollect, a[0][0:1])
|
|
}
|
|
finalAbbr := strings.Join(abbrCollect, "")
|
|
return finalAbbr
|
|
}
|
|
|
|
// 将给定结构体的内容通过JSON转换为`map[string]interface{}`类型的值
|
|
func ConvertStructToMap[T any](origin T) map[string]interface{} {
|
|
incr, _ := json.Marshal(origin)
|
|
var dest map[string]interface{}
|
|
json.Unmarshal(incr, &dest)
|
|
return dest
|
|
}
|
|
|
|
func ConvertSliceToInterfaceSlice[T any](origin []T) []interface{} {
|
|
dest := make([]interface{}, len(origin))
|
|
for i, e := range origin {
|
|
dest[i] = e
|
|
}
|
|
return dest
|
|
}
|
|
|
|
// 对指定的数组进行分区
|
|
func PartitionSlice[T any](slice []T, chunkSize int) [][]T {
|
|
var divided [][]T
|
|
for i := 0; i < len(slice); i += int(chunkSize) {
|
|
end := i + chunkSize
|
|
if end > len(slice) {
|
|
end = len(slice)
|
|
}
|
|
divided = append(divided, slice[i:end])
|
|
}
|
|
return divided
|
|
}
|