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.