annotate libgo/go/sort/example_interface_test.go @ 138:fc828634a951

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 08 Nov 2018 14:17:14 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // Copyright 2011 The Go Authors. All rights reserved.
kono
parents:
diff changeset
2 // Use of this source code is governed by a BSD-style
kono
parents:
diff changeset
3 // license that can be found in the LICENSE file.
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 package sort_test
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 import (
kono
parents:
diff changeset
8 "fmt"
kono
parents:
diff changeset
9 "sort"
kono
parents:
diff changeset
10 )
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 type Person struct {
kono
parents:
diff changeset
13 Name string
kono
parents:
diff changeset
14 Age int
kono
parents:
diff changeset
15 }
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 func (p Person) String() string {
kono
parents:
diff changeset
18 return fmt.Sprintf("%s: %d", p.Name, p.Age)
kono
parents:
diff changeset
19 }
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 // ByAge implements sort.Interface for []Person based on
kono
parents:
diff changeset
22 // the Age field.
kono
parents:
diff changeset
23 type ByAge []Person
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 func (a ByAge) Len() int { return len(a) }
kono
parents:
diff changeset
26 func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
kono
parents:
diff changeset
27 func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 func Example() {
kono
parents:
diff changeset
30 people := []Person{
kono
parents:
diff changeset
31 {"Bob", 31},
kono
parents:
diff changeset
32 {"John", 42},
kono
parents:
diff changeset
33 {"Michael", 17},
kono
parents:
diff changeset
34 {"Jenny", 26},
kono
parents:
diff changeset
35 }
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 fmt.Println(people)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
38 // There are two ways to sort a slice. First, one can define
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
39 // a set of methods for the slice type, as with ByAge, and
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
40 // call sort.Sort. In this first example we use that technique.
111
kono
parents:
diff changeset
41 sort.Sort(ByAge(people))
kono
parents:
diff changeset
42 fmt.Println(people)
kono
parents:
diff changeset
43
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
44 // The other way is to use sort.Slice with a custom Less
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
45 // function, which can be provided as a closure. In this
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
46 // case no methods are needed. (And if they exist, they
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
47 // are ignored.) Here we re-sort in reverse order: compare
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
48 // the closure with ByAge.Less.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
49 sort.Slice(people, func(i, j int) bool {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
50 return people[i].Age > people[j].Age
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
51 })
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
52 fmt.Println(people)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
53
111
kono
parents:
diff changeset
54 // Output:
kono
parents:
diff changeset
55 // [Bob: 31 John: 42 Michael: 17 Jenny: 26]
kono
parents:
diff changeset
56 // [Michael: 17 Jenny: 26 Bob: 31 John: 42]
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
57 // [John: 42 Bob: 31 Jenny: 26 Michael: 17]
111
kono
parents:
diff changeset
58 }