summaryrefslogtreecommitdiff
path: root/src/pkg/sort/example_keys_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/sort/example_keys_test.go')
-rw-r--r--src/pkg/sort/example_keys_test.go96
1 files changed, 0 insertions, 96 deletions
diff --git a/src/pkg/sort/example_keys_test.go b/src/pkg/sort/example_keys_test.go
deleted file mode 100644
index a8e47e492..000000000
--- a/src/pkg/sort/example_keys_test.go
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2013 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"
-)
-
-// A couple of type definitions to make the units clear.
-type earthMass float64
-type au float64
-
-// A Planet defines the properties of a solar system object.
-type Planet struct {
- name string
- mass earthMass
- distance au
-}
-
-// By is the type of a "less" function that defines the ordering of its Planet arguments.
-type By func(p1, p2 *Planet) bool
-
-// Sort is a method on the function type, By, that sorts the argument slice according to the function.
-func (by By) Sort(planets []Planet) {
- ps := &planetSorter{
- planets: planets,
- by: by, // The Sort method's receiver is the function (closure) that defines the sort order.
- }
- sort.Sort(ps)
-}
-
-// planetSorter joins a By function and a slice of Planets to be sorted.
-type planetSorter struct {
- planets []Planet
- by func(p1, p2 *Planet) bool // Closure used in the Less method.
-}
-
-// Len is part of sort.Interface.
-func (s *planetSorter) Len() int {
- return len(s.planets)
-}
-
-// Swap is part of sort.Interface.
-func (s *planetSorter) Swap(i, j int) {
- s.planets[i], s.planets[j] = s.planets[j], s.planets[i]
-}
-
-// Less is part of sort.Interface. It is implemented by calling the "by" closure in the sorter.
-func (s *planetSorter) Less(i, j int) bool {
- return s.by(&s.planets[i], &s.planets[j])
-}
-
-var planets = []Planet{
- {"Mercury", 0.055, 0.4},
- {"Venus", 0.815, 0.7},
- {"Earth", 1.0, 1.0},
- {"Mars", 0.107, 1.5},
-}
-
-// ExampleSortKeys demonstrates a technique for sorting a struct type using programmable sort criteria.
-func Example_sortKeys() {
- // Closures that order the Planet structure.
- name := func(p1, p2 *Planet) bool {
- return p1.name < p2.name
- }
- mass := func(p1, p2 *Planet) bool {
- return p1.mass < p2.mass
- }
- distance := func(p1, p2 *Planet) bool {
- return p1.distance < p2.distance
- }
- decreasingDistance := func(p1, p2 *Planet) bool {
- return !distance(p1, p2)
- }
-
- // Sort the planets by the various criteria.
- By(name).Sort(planets)
- fmt.Println("By name:", planets)
-
- By(mass).Sort(planets)
- fmt.Println("By mass:", planets)
-
- By(distance).Sort(planets)
- fmt.Println("By distance:", planets)
-
- By(decreasingDistance).Sort(planets)
- fmt.Println("By decreasing distance:", planets)
-
- // Output: By name: [{Earth 1 1} {Mars 0.107 1.5} {Mercury 0.055 0.4} {Venus 0.815 0.7}]
- // By mass: [{Mercury 0.055 0.4} {Mars 0.107 1.5} {Venus 0.815 0.7} {Earth 1 1}]
- // By distance: [{Mercury 0.055 0.4} {Venus 0.815 0.7} {Earth 1 1} {Mars 0.107 1.5}]
- // By decreasing distance: [{Mars 0.107 1.5} {Earth 1 1} {Venus 0.815 0.7} {Mercury 0.055 0.4}]
-}