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()
}
网友评论