获取对象数组最大对象

func Max(ns interface{}, f interface{}) interface{} {
    rv := reflect.ValueOf(ns)
    if rv.Len() == 0 {
        return nil
    }
    rf := reflect.ValueOf(f)
    rft := rf.Type()
    out := rft.Out(0)
    sort.Slice(ns, func(i, j int) bool {
        switch out.Kind() {
        case reflect.Float64:
            return rf.Call([]reflect.Value{rv.Index(i)})[0].Float() > rf.Call([]reflect.Value{rv.Index(j)})[0].Float()
        case reflect.Int, reflect.Int64:
            return rf.Call([]reflect.Value{rv.Index(i)})[0].Int() > rf.Call([]reflect.Value{rv.Index(j)})[0].Int()
        }
        panic("不支持的返回类型")
    })
    return rv.Index(0).Interface()
}

你可能感兴趣的:(获取对象数组最大对象)