~/til/go-sorting

Go: Ordene structs com slices.SortFunc e cmp.Compare

Você pode ordenar slices de structs com facilidade no Go 1.21+ usando os pacotes genéricos slices e cmp.

Como o cmp.Compare funciona

cmp.Compare(a, b) retorna:

- `-1` if `a < b`
- `0` if `a == b`
- `1` if `a > b`

É perfeito para escrever comparadores personalizados concisos em funções de ordenação.

Exemplo: Ordenando structs

import (
    "cmp"
    "slices"
)

type Book struct {
    Title string
    Year  int
}

books := []Book{
    {"The Go Programming Language", 2015},
    {"Learning Go", 2021},
    {"Introducing Go", 2016},
}

// Sort books by Year (ascending)
slices.SortFunc(books, func(a, b Book) int {
    return cmp.Compare(a.Year, b.Year)
})

// Sort books by Title (ascending)
slices.SortFunc(books, func(a, b Book) int {
    return cmp.Compare(a.Title, b.Title)
})

Não precisa implementar sort.Interface nem gerenciar a lógica de índices manualmente — é só usar generics!

Referências:

Dario em pé

status

status: online
> local: Brasil

conectar

stack

ultimos_til