]> Cypherpunks repositories - gostls13.git/commitdiff
sort: new example: Sorting slices with sort.SliceStable
authorKenny Grant <kennygrant@gmail.com>
Sat, 18 Feb 2017 16:56:45 +0000 (16:56 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 22 Feb 2017 21:23:12 +0000 (21:23 +0000)
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 <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/sort/example_test.go

index 980c0d03680f53d6577e3e1a6f49895aa3124f5b..89ebe790c1cbf21a760214738f93c4dabf777d20 100644 (file)
@@ -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}]
+}