How Do I Reverse Sort a Slice of Integer Go?

How Do I Reverse Sort a Slice of Integer Go?

I am trying to reverse-sort a slice of integers in Go.

  example := []int{1,25,3,5,4}
  sort.Ints(example) // this will give me a slice sorted from 1 to the highest number

How do I sort it so that it goes from highest to lowest? so [25 5 4 3 1]

I have tried this

sort.Sort(sort.Reverse(sort.Ints(keys)))

Source:

However, I am getting the error below

# command-line-arguments
./Roman_Numerals.go:31: sort.Ints(keys) used as value

3 Answers

sort.Ints is a convenient function to sort a couple of ints. Generally you need to implement the sort.Interface interface if you want to sort something and sort.Reverse just returns a different implementation of that interface that redefines the Less method.

Luckily the sort package contains a predefined type called IntSlice that implements sort.Interface:

keys := []int{3, 2, 8, 1}
sort.Sort(sort.Reverse(sort.IntSlice(keys)))
fmt.Println(keys)
0
package main

import (
        "fmt"
        "sort"
)

func main() {
        example := []int{1, 25, 3, 5, 4}
        sort.Sort(sort.Reverse(sort.IntSlice(example)))
        fmt.Println(example)
}

Playground


Output:

[25 5 4 3 1]

Instead of using two function calls and a cast, you can do it with just sort.Slice:

package main

import (
   "fmt"
   "sort"
)

func main() {
   example := []int{1,25,3,5,4}
   sort.Slice(example, func(a, b int) bool {
      return example[b] < example[a]
   })
   fmt.Println(example)
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Alexander Ross
Author

Alexander Ross

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.