数组元素调整
2019-11-14 本文已影响0人
funcx
package xs
import "reflect"
//flag:true->删除元素,false->保留元素
func adjustElem(xs interface{}, flag bool, f interface{}) {
resultv := reflect.ValueOf(xs)
slicev := resultv.Elem()
for i := slicev.Len() - 1; i >= 0; i-- {
if reflect.ValueOf(f).Call([]reflect.Value{slicev.Index(i)})[0].Bool() == flag {
slicev = reflect.AppendSlice(slicev.Slice(0, i), slicev.Slice(i+1, slicev.Len()))
}
}
resultv.Elem().Set(slicev)
}
func RemoveElem(xs interface{}, f interface{}) {
adjustElem(xs, true, f)
}
func RetainElem(xs interface{}, f interface{}) {
adjustElem(xs, false, f)
}
func Contains(xs interface{}, elem interface{}) {
}
func ContainsFunc(xs interface{}, f interface{}) bool {
slicev := reflect.ValueOf(xs)
for i := 0; i < slicev.Len(); i++ {
if reflect.ValueOf(f).Call([]reflect.Value{slicev.Index(i)})[0].Bool() {
return true
}
}
return false
}