88 lines
1.5 KiB
Go
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
|
|
}
|