go-ml.dev/pkg/base@v0.0.0-20200610162856-60c38abac71b/fu/sort.go (about)

     1  package fu
     2  
     3  import (
     4  	"reflect"
     5  	"sort"
     6  )
     7  
     8  func Sort(a interface{}) {
     9  	v := reflect.ValueOf(a)
    10  	t := v.Type().Elem()
    11  	switch t.Kind() {
    12  	case reflect.Int:
    13  		sort.Ints(a.([]int))
    14  	case reflect.String:
    15  		sort.Strings(a.([]string))
    16  	default:
    17  		sort.Slice(a, func(i, j int) bool { return Less(v.Index(i), v.Index(j)) })
    18  	}
    19  }
    20  
    21  func Sorted(a interface{}) interface{} {
    22  	b := CopySlice(a)
    23  	Sort(b)
    24  	return b
    25  }