github.com/glycerine/zebrapack@v4.1.1-0.20181107023619-e955d028f9bf+incompatible/slides/state-of-go/stdlib/sort/sort.go (about)

     1  package main
     2  
     3  /*
     4  
     5  import (
     6  	"fmt"
     7  	"sort"
     8  )
     9  
    10  type Person struct {
    11  	Name     string
    12  	AgeYears int
    13  	SSN      int
    14  }
    15  
    16  type byName []Person
    17  
    18  func (b byName) Len() int           { return len(b) }
    19  func (b byName) Less(i, j int) bool { return b[i].Name < b[j].Name }
    20  func (b byName) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
    21  
    22  type byAge []Person
    23  
    24  func (b byAge) Len() int           { return len(b) }
    25  func (b byAge) Less(i, j int) bool { return b[i].AgeYears < b[j].AgeYears }
    26  func (b byAge) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
    27  
    28  type bySSN []Person
    29  
    30  func (b bySSN) Len() int           { return len(b) }
    31  func (b bySSN) Less(i, j int) bool { return b[i].SSN < b[j].SSN }
    32  func (b bySSN) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
    33  
    34  func main() {
    35  	p := []Person{
    36  		{"Alice", 20, 1234},
    37  		{"Bob", 10, 2345},
    38  		{"Carla", 15, 3456},
    39  	}
    40  
    41  	sort.Sort(byName(p))
    42  	fmt.Printf("sorted by name: %v\n", p)
    43  
    44  	sort.Sort(byAge(p))
    45  	fmt.Printf("sorted by age: %v\n", p)
    46  
    47  	sort.Sort(bySSN(p))
    48  	fmt.Printf("sorted by SSN: %v\n", p)
    49  }
    50  */