77 lines · 1.6 KB · Go
RawDownload
// 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)	}}