86 lines
1.5 KiB
Go
86 lines
1.5 KiB
Go
package impl
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
)
|
|
|
|
type Int64Array []int64
|
|
|
|
func (v *Int64Array) 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 Int64Array) Value() (driver.Value, error) {
|
|
return json.Marshal(v)
|
|
}
|
|
|
|
func (v Int64Array) RemoveDuplicates() Int64Array {
|
|
newArr := make([]int64, 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 Int64Array) RemoveEmpty() Int64Array {
|
|
return v.RemoveValue(0)
|
|
}
|
|
|
|
func (v Int64Array) RemoveValue(value int64) Int64Array {
|
|
newArr := make([]int64, 0)
|
|
for i := 0; i < len(v); i++ {
|
|
if v[i] != value {
|
|
newArr = append(newArr, v[i])
|
|
}
|
|
}
|
|
return newArr
|
|
}
|
|
|
|
func (v Int64Array) Contains(id int64) bool {
|
|
for _, i := range v {
|
|
if i == id {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (v Int64Array) Eq(arr []int64) bool {
|
|
if len(v) != len(arr) {
|
|
return false
|
|
}
|
|
for _, i := range arr {
|
|
//只要有一个不包含就是不一样的
|
|
if v.Contains(i) == false {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (v Int64Array) ToIntSlice() []int {
|
|
out := make([]int, 0)
|
|
for _, i := range v {
|
|
out = append(out, int(i))
|
|
}
|
|
return out
|
|
}
|