kefu/tools/array.go

100 lines
2.0 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 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
}