123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2011 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package sort_test
- import (
- "fmt"
- "sort"
- )
- type Grams int
- func (g Grams) String() string { return fmt.Sprintf("%dg", int(g)) }
- type Organ struct {
- Name string
- Weight Grams
- }
- type Organs []*Organ
- func (s Organs) Len() int { return len(s) }
- func (s Organs) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
- // ByName implements sort.Interface by providing Less and using the Len and
- // Swap methods of the embedded Organs value.
- type ByName struct{ Organs }
- func (s ByName) Less(i, j int) bool { return s.Organs[i].Name < s.Organs[j].Name }
- // ByWeight implements sort.Interface by providing Less and using the Len and
- // Swap methods of the embedded Organs value.
- type ByWeight struct{ Organs }
- func (s ByWeight) Less(i, j int) bool { return s.Organs[i].Weight < s.Organs[j].Weight }
- func Example_sortWrapper() {
- s := []*Organ{
- {"brain", 1340},
- {"heart", 290},
- {"liver", 1494},
- {"pancreas", 131},
- {"prostate", 62},
- {"spleen", 162},
- }
- sort.Sort(ByWeight{s})
- fmt.Println("Organs by weight:")
- printOrgans(s)
- sort.Sort(ByName{s})
- fmt.Println("Organs by name:")
- printOrgans(s)
- // Output:
- // Organs by weight:
- // prostate (62g)
- // pancreas (131g)
- // spleen (162g)
- // heart (290g)
- // brain (1340g)
- // liver (1494g)
- // Organs by name:
- // brain (1340g)
- // heart (290g)
- // liver (1494g)
- // pancreas (131g)
- // prostate (62g)
- // spleen (162g)
- }
- func printOrgans(s []*Organ) {
- for _, o := range s {
- fmt.Printf("%-8s (%v)\n", o.Name, o.Weight)
- }
- }
|