mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-13 01:02:28 +08:00
refactor: function in slice.go
This commit is contained in:
@@ -363,6 +363,7 @@ func UpdateByIndex(slice interface{}, index int, value interface{}) (interface{}
|
|||||||
if index < 0 || index >= v.Len() {
|
if index < 0 || index >= v.Len() {
|
||||||
return slice, errors.New("InvalidSliceIndex")
|
return slice, errors.New("InvalidSliceIndex")
|
||||||
}
|
}
|
||||||
|
|
||||||
if reflect.TypeOf(slice).Elem() != reflect.TypeOf(value) {
|
if reflect.TypeOf(slice).Elem() != reflect.TypeOf(value) {
|
||||||
return slice, errors.New("InvalidValueType")
|
return slice, errors.New("InvalidValueType")
|
||||||
}
|
}
|
||||||
@@ -380,7 +381,7 @@ func Unique(slice interface{}) interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var temp []interface{}
|
var temp []interface{}
|
||||||
len := 0
|
|
||||||
for i := 0; i < sv.Len(); i++ {
|
for i := 0; i < sv.Len(); i++ {
|
||||||
v := sv.Index(i).Interface()
|
v := sv.Index(i).Interface()
|
||||||
skip := true
|
skip := true
|
||||||
@@ -392,12 +393,11 @@ func Unique(slice interface{}) interface{} {
|
|||||||
}
|
}
|
||||||
if skip {
|
if skip {
|
||||||
temp = append(temp, v)
|
temp = append(temp, v)
|
||||||
len++
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res := reflect.MakeSlice(sv.Type(), len, len)
|
res := reflect.MakeSlice(sv.Type(), len(temp), len(temp))
|
||||||
for i := 0; i < len; i++ {
|
for i := 0; i < len(temp); i++ {
|
||||||
res.Index(i).Set(reflect.ValueOf(temp[i]))
|
res.Index(i).Set(reflect.ValueOf(temp[i]))
|
||||||
}
|
}
|
||||||
return res.Interface()
|
return res.Interface()
|
||||||
@@ -423,21 +423,21 @@ func Union(slices ...interface{}) interface{} {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// append all slices, then unique it
|
// append all slices, then unique it
|
||||||
var allSlice []interface{}
|
var allSlices []interface{}
|
||||||
len := 0
|
len := 0
|
||||||
for i := range slices {
|
for i := range slices {
|
||||||
sv := sliceValue(slices[i])
|
sv := sliceValue(slices[i])
|
||||||
len += sv.Len()
|
len += sv.Len()
|
||||||
for j := 0; j < sv.Len(); j++ {
|
for j := 0; j < sv.Len(); j++ {
|
||||||
v := sv.Index(j).Interface()
|
v := sv.Index(j).Interface()
|
||||||
allSlice = append(allSlice, v)
|
allSlices = append(allSlices, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sv := sliceValue(slices[0])
|
sv := sliceValue(slices[0])
|
||||||
res := reflect.MakeSlice(sv.Type(), len, len)
|
res := reflect.MakeSlice(sv.Type(), len, len)
|
||||||
for i := 0; i < len; i++ {
|
for i := 0; i < len; i++ {
|
||||||
res.Index(i).Set(reflect.ValueOf(allSlice[i]))
|
res.Index(i).Set(reflect.ValueOf(allSlices[i]))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Unique(res.Interface())
|
return Unique(res.Interface())
|
||||||
@@ -547,6 +547,7 @@ func Without(slice interface{}, values ...interface{}) interface{} {
|
|||||||
if sv.Len() == 0 {
|
if sv.Len() == 0 {
|
||||||
return slice
|
return slice
|
||||||
}
|
}
|
||||||
|
|
||||||
var indexes []int
|
var indexes []int
|
||||||
for i := 0; i < sv.Len(); i++ {
|
for i := 0; i < sv.Len(); i++ {
|
||||||
v := sv.Index(i).Interface()
|
v := sv.Index(i).Interface()
|
||||||
|
|||||||
Reference in New Issue
Block a user