From 8321be63396363cd18e9d23b4b05bcb3e5791fa7 Mon Sep 17 00:00:00 2001 From: Kenny Grant Date: Sat, 18 Feb 2017 16:56:45 +0000 Subject: [PATCH] sort: new example: Sorting slices with sort.SliceStable ExampleSliceStable echoes the sort.Slice example, to demonstrate sorting on two fields together preserving order between sorts. Change-Id: I8afc20c0203991bfd57260431eda73913c165355 Reviewed-on: https://go-review.googlesource.com/37196 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/sort/example_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/sort/example_test.go b/src/sort/example_test.go index 980c0d03680..89ebe790c1c 100644 --- a/src/sort/example_test.go +++ b/src/sort/example_test.go @@ -41,3 +41,31 @@ func ExampleSlice() { // Output: By name: [{Alice 55} {Bob 75} {Gopher 7} {Vera 24}] // By age: [{Gopher 7} {Vera 24} {Alice 55} {Bob 75}] } + +func ExampleSliceStable() { + + people := []struct { + Name string + Age int + }{ + {"Alice", 25}, + {"Elizabeth", 75}, + {"Alice", 75}, + {"Bob", 75}, + {"Alice", 75}, + {"Bob", 25}, + {"Colin", 25}, + {"Elizabeth", 25}, + } + + // Sort by name, preserving original order + sort.SliceStable(people, func(i, j int) bool { return people[i].Name < people[j].Name }) + fmt.Println("By name:", people) + + // Sort by age preserving name order + sort.SliceStable(people, func(i, j int) bool { return people[i].Age < people[j].Age }) + fmt.Println("By age,name:", people) + + // Output: By name: [{Alice 25} {Alice 75} {Alice 75} {Bob 75} {Bob 25} {Colin 25} {Elizabeth 75} {Elizabeth 25}] + // By age,name: [{Alice 25} {Bob 25} {Colin 25} {Elizabeth 25} {Alice 75} {Alice 75} {Bob 75} {Elizabeth 75}] +}