Files
exchange_go/pkg/utility/slices.go
2025-03-19 09:38:11 +08:00

142 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package utility
import "strings"
// ContainsStr []string 包含元素?
func ContainsStr(arr []string, v string) bool {
for _, a := range arr {
if a == v {
return true
}
}
return false
}
func RemoveByValue(slice []string, value string) []string {
for i, v := range slice {
if v == value {
// 找到值,删除对应索引
return append(slice[:i], slice[i+1:]...)
}
}
return slice // 未找到返回原切片
}
// ContainsInt []int 包含元素?
func ContainsInt(arr []int, v int) bool {
for _, a := range arr {
if a == v {
return true
}
}
return false
}
func HasSuffix(data string, suffixs []string) bool {
for _, suffix := range suffixs {
if strings.HasSuffix(data, suffix) {
return true
}
}
return false
}
// SplitSlice 将 []string 切片根据最大数量分割成二维数组
func SplitSlice[T any](slice []T, maxSize int) [][]T {
var result [][]T
// 遍历切片,每次取 maxSize 个元素
for i := 0; i < len(slice); i += maxSize {
end := i + maxSize
// 如果 end 超出切片长度,则取到切片末尾
if end > len(slice) {
end = len(slice)
}
// 将当前段添加到结果中
result = append(result, slice[i:end])
}
return result
}
//// 切片;
//type slices struct {
//}
//
//// 构建;
//func Slices() *slices {
// return &slices{}
//}
//
//// 包含元素?
//func (this *slices) Contains(s interface{}, v interface{}) bool {
// // 相关定义;
// ss := reflect.Indirect(reflect.ValueOf(s))
// slen := ss.Len()
// // 遍历;
// for i := 0; i < slen; i++ {
// // 定位元素;
// sv := reflect.Indirect(ss.Index(i))
// if fmt.Sprint(sv.Interface()) == fmt.Sprint(v) {
// return true
// }
// }
// return false
//}
//
//// 转为切片;
//func (this *slices) Slice(s interface{}) []interface{} {
// // 相关定义;
// ss := reflect.Indirect(reflect.ValueOf(s))
// slen := ss.Len()
// // 遍历;
// out := make([]interface{}, slen)
// for i := 0; i < slen; i++ {
// // 追加;
// out[i] = ss.Index(i).Interface()
// }
// return out
//}
//
//// 校验为nil?
//func (this *slices) IsNil(v interface{}) bool {
// if v == nil {
// return true
// }
// vi := reflect.ValueOf(v)
// if vi.Kind() == reflect.Ptr {
// return vi.Elem().IsNil()
// }
// return vi.IsNil()
//}
//
//// StringSliceReflectEqual 判断 string和slice 是否相等
//// 因为使用了反射所以效率较低可以看benchmark结果
//func (this *slices) StringSliceReflectEqual(a, b []string) bool {
// return reflect.DeepEqual(a, b)
//}
//
//// StringSliceEqual 判断 string和slice 是否相等
//// 使用了传统的遍历方式
//func (this *slices) StringSliceEqual(a, b []string) bool {
// if len(a) != len(b) {
// return false
// }
//
// // reflect.DeepEqual的结果保持一致
// if (a == nil) != (b == nil) {
// return false
// }
//
// // bounds check 边界检查
// // 避免越界
// b = b[:len(a)]
// for i, v := range a {
// if v != b[i] {
// return false
// }
// }
//
// return true
//}