kefu/tools/array.go

100 lines
2.0 KiB
Go
Raw Permalink Normal View History

2024-12-10 02:50:12 +00:00
package tools
import (
"encoding/json"
"reflect"
"strings"
)
// 判断某一个值是否含在切片之中
func InArray(val interface{}, array interface{}) (exists bool, index int) {
exists = false
index = -1
switch reflect.TypeOf(array).Kind() {
case reflect.Slice:
s := reflect.ValueOf(array)
for i := 0; i < s.Len(); i++ {
if reflect.DeepEqual(val, s.Index(i).Interface()) == true {
index = i
exists = true
return
}
}
}
return
}
/*
分割判断
s := "hello,world"
substr := "world"
separators := []string{",", " "}
result := inArray(s, substr, separators...)
fmt.Println(result) // true
*/
func InArrayStr(s string, substr string, contains bool, separators ...string) bool {
// 使用分隔符分割字符串为切片
parts := []string{s}
for _, sep := range separators {
newParts := make([]string, 0)
for _, part := range parts {
newParts = append(newParts, strings.Split(part, sep)...)
}
parts = newParts
}
// 判断子字符串是否在切片中
// 判断子字符串是否在切片中
for _, s := range parts {
if contains && strings.Contains(substr, s) {
return true
}
if !contains && s == substr {
return true
}
}
return false
}
/*
data := map[string]interface{}{
"name": "Tom",
"age": 18,
"gender": "male",
}
str, err := JsonEncode(data)
*/
func JsonEncode(v interface{}) (string, error) {
b, err := json.Marshal(v)
if err != nil {
return "", err
}
return string(b), nil
}
/*
var decodedData map[string]interface{}
err = JsonDecode(str, &decodedData)
*/
func JsonDecode(s string, v interface{}) error {
return json.Unmarshal([]byte(s), v)
}
// 通过map主键唯一的特性过滤重复元素
func RemoveDuplicateStrings(strs []string) []string {
result := []string{}
tempMap := map[string]byte{} // 存放不重复字符串
for _, e := range strs {
l := len(tempMap)
tempMap[e] = 0
if len(tempMap) != l { // 加入map后map长度变化则元素不重复
result = append(result, e)
}
}
return result
}