mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
// 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)
 | 
						|
	}
 | 
						|
}
 |