light-core/impl/stringArray.go
2024-12-17 22:28:48 +08:00

88 lines
1.5 KiB
Go

package impl
import (
"database/sql/driver"
"encoding/json"
"strings"
)
type StringArray []string
func (v *StringArray) Scan(value interface{}) error {
//判断类型
switch data := value.(type) {
case []byte:
return json.Unmarshal(data, v)
case string:
return json.Unmarshal([]byte(data), v)
case nil:
return nil
}
return json.Unmarshal(value.([]byte), v)
}
func (v StringArray) Value() (driver.Value, error) {
return json.Marshal(v)
}
func (v StringArray) RemoveDuplicates() StringArray {
newArr := make([]string, 0)
for i := 0; i < len(v); i++ {
repeat := false
for j := i + 1; j < len(v); j++ {
if v[i] == v[j] {
repeat = true
break
}
}
if !repeat {
newArr = append(newArr, v[i])
}
}
return newArr
}
func (v StringArray) RemoveEmpty() StringArray {
return v.RemoveValue("")
}
func (v StringArray) RemoveValue(value string) StringArray {
newArr := make([]string, 0)
for i := 0; i < len(v); i++ {
if !strings.EqualFold(v[i], value) {
newArr = append(newArr, v[i])
}
}
return newArr
}
func (v StringArray) Contains(str string) bool {
for _, i := range v {
if i == str {
return true
}
}
return false
}
func (v StringArray) Eq(strArr []string) bool {
if len(v) != len(strArr) {
return false
}
for _, i := range strArr {
//只要有一个不包含就是不一样的
if v.Contains(i) == false {
return false
}
}
return true
}
func (v StringArray) ToStringSlice() []string {
out := make([]string, 0)
for _, i := range v {
out = append(out, i)
}
return out
}