github.com/AESNooper/go/src@v0.0.0-20220218095104-b56a4ab1bbbb/sort/example_test.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package sort_test
     6  
     7  import (
     8  	"fmt"
     9  	"math"
    10  	"sort"
    11  )
    12  
    13  func ExampleInts() {
    14  	s := []int{5, 2, 6, 3, 1, 4} // unsorted
    15  	sort.Ints(s)
    16  	fmt.Println(s)
    17  	// Output: [1 2 3 4 5 6]
    18  }
    19  
    20  func ExampleIntsAreSorted() {
    21  	s := []int{1, 2, 3, 4, 5, 6} // sorted ascending
    22  	fmt.Println(sort.IntsAreSorted(s))
    23  
    24  	s = []int{6, 5, 4, 3, 2, 1} // sorted descending
    25  	fmt.Println(sort.IntsAreSorted(s))
    26  
    27  	s = []int{3, 2, 4, 1, 5} // unsorted
    28  	fmt.Println(sort.IntsAreSorted(s))
    29  
    30  	// Output: true
    31  	// false
    32  	// false
    33  }
    34  
    35  func ExampleFloat64s() {
    36  	s := []float64{5.2, -1.3, 0.7, -3.8, 2.6} // unsorted
    37  	sort.Float64s(s)
    38  	fmt.Println(s)
    39  
    40  	s = []float64{math.Inf(1), math.NaN(), math.Inf(-1), 0.0} // unsorted
    41  	sort.Float64s(s)
    42  	fmt.Println(s)
    43  
    44  	// Output: [-3.8 -1.3 0.7 2.6 5.2]
    45  	// [NaN -Inf 0 +Inf]
    46  }
    47  
    48  func ExampleFloat64sAreSorted() {
    49  	s := []float64{0.7, 1.3, 2.6, 3.8, 5.2} // sorted ascending
    50  	fmt.Println(sort.Float64sAreSorted(s))
    51  
    52  	s = []float64{5.2, 3.8, 2.6, 1.3, 0.7} // sorted descending
    53  	fmt.Println(sort.Float64sAreSorted(s))
    54  
    55  	s = []float64{5.2, 1.3, 0.7, 3.8, 2.6} // unsorted
    56  	fmt.Println(sort.Float64sAreSorted(s))
    57  
    58  	// Output: true
    59  	// false
    60  	// false
    61  }
    62  
    63  func ExampleReverse() {
    64  	s := []int{5, 2, 6, 3, 1, 4} // unsorted
    65  	sort.Sort(sort.Reverse(sort.IntSlice(s)))
    66  	fmt.Println(s)
    67  	// Output: [6 5 4 3 2 1]
    68  }
    69  
    70  func ExampleSlice() {
    71  	people := []struct {
    72  		Name string
    73  		Age  int
    74  	}{
    75  		{"Gopher", 7},
    76  		{"Alice", 55},
    77  		{"Vera", 24},
    78  		{"Bob", 75},
    79  	}
    80  	sort.Slice(people, func(i, j int) bool { return people[i].Name < people[j].Name })
    81  	fmt.Println("By name:", people)
    82  
    83  	sort.Slice(people, func(i, j int) bool { return people[i].Age < people[j].Age })
    84  	fmt.Println("By age:", people)
    85  	// Output: By name: [{Alice 55} {Bob 75} {Gopher 7} {Vera 24}]
    86  	// By age: [{Gopher 7} {Vera 24} {Alice 55} {Bob 75}]
    87  }
    88  
    89  func ExampleSliceStable() {
    90  
    91  	people := []struct {
    92  		Name string
    93  		Age  int
    94  	}{
    95  		{"Alice", 25},
    96  		{"Elizabeth", 75},
    97  		{"Alice", 75},
    98  		{"Bob", 75},
    99  		{"Alice", 75},
   100  		{"Bob", 25},
   101  		{"Colin", 25},
   102  		{"Elizabeth", 25},
   103  	}
   104  
   105  	// Sort by name, preserving original order
   106  	sort.SliceStable(people, func(i, j int) bool { return people[i].Name < people[j].Name })
   107  	fmt.Println("By name:", people)
   108  
   109  	// Sort by age preserving name order
   110  	sort.SliceStable(people, func(i, j int) bool { return people[i].Age < people[j].Age })
   111  	fmt.Println("By age,name:", people)
   112  
   113  	// Output: By name: [{Alice 25} {Alice 75} {Alice 75} {Bob 75} {Bob 25} {Colin 25} {Elizabeth 75} {Elizabeth 25}]
   114  	// By age,name: [{Alice 25} {Bob 25} {Colin 25} {Elizabeth 25} {Alice 75} {Alice 75} {Bob 75} {Elizabeth 75}]
   115  }
   116  
   117  func ExampleStrings() {
   118  	s := []string{"Go", "Bravo", "Gopher", "Alpha", "Grin", "Delta"}
   119  	sort.Strings(s)
   120  	fmt.Println(s)
   121  	// Output: [Alpha Bravo Delta Go Gopher Grin]
   122  }