Ordenado por sort.Slice
Si la versión de Go es posterior a la 1.7, podemos utilizar la función sort.Slice
para ordenar rápidamente un mapa (map) por clave o valor. sort.Slice
te permite especificar una función de comparación personalizada.
A continuación, un ejemplo:
package main
import (
"fmt"
"sort"
)
func main() {
m1 := map[int]int{
21: 99,
12: 98,
35: 17,
24: 36,
}
type kv struct {
Key int
Value int
}
var s1 []kv
for k, v := range m1 {
s1 = append(s1, kv{k, v})
}
sort.Slice(s1, func(i, j int) bool {
return s1[i].Key < s1[j].Key
})
fmt.Println("Sorted in ascending order by key:")
for _, pair := range s1 {
fmt.Printf("%d, %d\n", pair.Key, pair.Value)
}
}
Ejecuta el programa:
go run ~/project/map.go
La salida es la siguiente:
Sorted in ascending order by key:
12, 98
21, 99
24, 36
35, 17
En este programa, utilizamos una estructura (struct) kv
para almacenar los pares clave-valor del mapa. Luego, ordenamos el slice de estructuras utilizando la función sort.Slice()
y una función de comparación anónima. Esta función de comparación (func(i, j int) bool
) determina el orden de clasificación basado en el campo Key
de nuestra estructura.
También podemos utilizar sort.Slice
para ordenar el mapa en orden descendente por clave o en orden ascendente por valor modificando esta función de comparación. Esto brinda una gran flexibilidad en cómo queremos ordenar nuestros datos de mapa.