-
Notifications
You must be signed in to change notification settings - Fork 0
/
composite_sort_key.go
57 lines (43 loc) · 1.12 KB
/
composite_sort_key.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package cmpop
import (
"cmp"
"slices"
"github.com/devlights/gomy/output"
)
// CompositeSortKeys は、cmp.Or, cmp.Compareを用いて複合キーのソート処理を実装するサンプルです。
func CompositeSortKeys() error {
type Person struct {
Name string
Age uint8
}
var (
people = []Person{
{"Aikawa", 21},
{"Tanaka", 22},
{"Kato", 33},
{"Suzuki", 44},
{"Tanaka", 44},
{"Aikawa", 66},
}
)
output.Stdoutl("[before]", people)
// 名前の昇順が第1キー、年齢の降順が第2キーとする
slices.SortFunc(people, func(x, y Person) int {
return cmp.Or(
cmp.Compare(x.Name, y.Name),
-cmp.Compare(x.Age, y.Age),
)
})
output.Stdoutl("[after ]", people)
return nil
/*
$ task
task: Task "build" is up to date
task: [run] ./try-golang -onetime
ENTER EXAMPLE NAME: cmpop_composite_sort_key
[Name] "cmpop_composite_sort_keys"
[before] [{Aikawa 21} {Tanaka 22} {Kato 33} {Suzuki 44} {Tanaka 44} {Aikawa 66}]
[after ] [{Aikawa 66} {Aikawa 21} {Kato 33} {Suzuki 44} {Tanaka 44} {Tanaka 22}]
[Elapsed] 62.25µs
*/
}