Pular para o conteúdo principal

victorstein.dev

69/100 Dias de Golang - Ordenação com o pacote sort

Table of Contents

# Ordenação com o pacote sort

Podemos implementar uma ordenação na “unha” ou usar o pacote sort que já traz implementações extremamente otimizadas de algoritmos eficientes e tudo isso com suporte a vários tipos de dados. Vamos ver hoje como fazer ordenações no Go.

Primeiro temos que importar o pacote, lembrando que ele é um pacote padrão do Golang:

import "sort"

De forma geral, existe uma método para cada tipo, então para ordenar um slice de inteiros usamos sort.Ints, floats sort.Float64s

nums := []int{5, 88, 7, 21, -4}
sort.Ints(nums)

s := []float64{3.2, 12.2, 0.2, 9.0, -1.3}
sort.Float64s(s)

Podemos ordenar quando o tipo é string

nomes := []string{"Java", "Python", "Golang"}
sort.Strings(nomes)

Temos uma função muito útil também, que serve para verificar se o slice está ordenado em ordem crescente:

sort.IntsAreSorted([]int{1, 2, 3})         
sort.StringsAreSorted([]string{"a", "b"}) 

Esse método irá retornar um bool.

Podemos também definir um método customizado, vamos dizer que temos um struct de Pessoas e um dos campos é a idade, e quero ordenar um slice pelo campo idade:

type Pessoa struct {
    Nome string
    Idade int
}

func main() {
    pessoas := []Pessoa{
        {"Golang", 15},
        {"Python", 34},
        {"Java", 29},
    }

    sort.Slice(pessoas, func(i, j int) bool {
        return pessoas[i].Idade < pessoas[j].Idade
    })
}

Podemos também implementar uma ordenação mais complexa, aí usamos a interface sort.Interface:

type PorNome []Pessoa

func (p PorNome) Len() int           { return len(p) }
func (p PorNome) Less(i, j int) bool { return p[i].Nome < p[j].Nome }
func (p PorNome) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }

func main() {
    pessoas := []Pessoa{
        {"Golang", 15},
        {"Python", 34},
        {"Java", 29},,
    }

    sort.Sort(PorNome(pessoas))
    fmt.Println(pessoas)
}

Na documentação do package sort temos todas as funções e vários exemplos de como usar o sort.