package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
// Vale Vale结构体
type Vale struct {
Name string
Age int
}
func (vale Vale) String() string {
return fmt.Sprintf("Name=%v, Age=%v", vale.Name, vale.Age)
}
// ValeSlice Vale的切片
type ValeSlice []Vale
func (valeSlice ValeSlice) Len() int {
return len(valeSlice)
}
func (valeSlice ValeSlice) Less(i, j int) bool {
// return valeSlice[i].Age < valeSlice[j].Age // Age Ascend
return len(valeSlice[i].Name) > len(valeSlice[j].Name)
}
func (valeSlice ValeSlice) Swap(i, j int) {
/* tmp := valeSlice[i]
valeSlice[i] = valeSlice[j]
valeSlice[j] = tmp*/
valeSlice[i], valeSlice[j] = valeSlice[j], valeSlice[i]
}
func main() {
var intSlice = []int{7, 5, -5, 0, 3}
sort.Ints(intSlice)
fmt.Println(intSlice)
rand.Seed(time.Now().Unix())
var valeSlice ValeSlice
for i := 0; i < 10; i++ {
intn := rand.Intn(100)
vale := Vale{
Name: fmt.Sprintf("vale-%d", intn),
Age: intn,
}
valeSlice = append(valeSlice, vale)
}
for _, v := range valeSlice {
fmt.Println(v)
}
sort.Sort(valeSlice)
fmt.Println("~~~~~After Sort~~~~~")
for _, v := range valeSlice {
fmt.Println(v)
}
}
