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

87 lines
1.4 KiB
Go

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