142 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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(slice []string, maxSize int) [][]string {
 | 
						||
	var result [][]string
 | 
						||
 | 
						||
	// 遍历切片,每次取 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
 | 
						||
//}
 |