数组元素调整

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
}

你可能感兴趣的:(数组元素调整)