美文网首页
数组元素调整

数组元素调整

作者: funcx | 来源:发表于2019-11-14 11:43 被阅读0次
    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
    }
    

    相关文章

      网友评论

          本文标题:数组元素调整

          本文链接:https://www.haomeiwen.com/subject/mhfrictx.html