1. 程式人生 > 其它 >Go: Custom Sort

Go: Custom Sort

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) } }