Esta pagina se ve mejor con JavaScript habilitado

How to: ordenar elementos utilizando el paquete Sort [Go]

 ·  ☕ 3 minutos lectura  ·  ✍️ Saturnino Pimentel
    🏷️
  • #Go

En algunas ocasiones durante el proceso de desarrollo es necesario ordenar una colección de elementos previo a realizar algún proceso, esto suele implicar el escribir código para implementar algún algoritmo de ordenamiento, afortunadamente en Go tenemos la opción de utilizar el paquete Sort para estas tares.

El paquete Sort contiene las funciones sort.Ints, sort.Float64s y sort.Strings las cuales nos van a permitir ordenar slices del tipo mencionado en las funciones, a continuación se muestra un ejemplo de cómo utilizar el método sort.Ints.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package main

import (
	"fmt"
	"sort"
)

func main() {

	integers := []int{10, 4, 5, 7, 3}
	sort.Ints(integers)
	fmt.Print(integers)
}

https://go.dev/play/p/mAsovhLVrVu

Implementando la interface ‘sort.Interface’

Cuando trabajamos con colecciones de estructuras podemos utilizar la interface Interface dentro del paquete sort la cual contiene los siguientes métodos.

1
2
3
Len()
Less(i int, j int) bool
Swap(i int, j int)

Al implementar los métodos podemos ordenar de forma sencilla los elementos de la colección, veamos un ejemplo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package main

import (
	"fmt"
	"sort"
)

type Person struct {
	Id uint
}

type People []Person

// Len is the number of elements in the collection.
func (p People) Len() int {
	return len(p)
}

func (p People) Less(i int, j int) bool {
	return p[i].Id < p[j].Id
}

// Swap swaps the elements with indexes i and j.
func (p People) Swap(i int, j int) {
	p[i], p[j] = p[j], p[i]
}

func main() {
	people := People{
		{Id: 10}, {Id: 1}, {Id: 9}, {Id: 5},
	}
	sort.Sort(people)
	fmt.Print(people)
}

Como podrás notar en el ejemplo utilizamos la type definition type People []Person.

https://go.dev/play/p/hMwpyvzdcqK

Utilizando la función sort.Slice

Por ultimo existe otra opción para ordenar slices aunque este última opción utiliza reflection con el respectivo costo de recursos que eso implica, a continuación se muestra un ejemplo de cómo utilizar la función.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
	"fmt"
	"sort"
)

type Person struct {
	Id uint
}

func main() {
	people := []Person{
		{Id: 10}, {Id: 1}, {Id: 9}, {Id: 5},
	}
	sort.Slice(people, func(i, j int) bool {
		return people[i].Id < people[j].Id
	})
	fmt.Print(people)
}

https://go.dev/play/p/Z_0EDDoCR7i

Como podrás notar el paquete sort nos ofrece varias opciones para ordenar nuestros elementos además de algunas funciones para comprobar si los elementos dentro de una colección están ordenados lo cual ayudará a mejorar nuestra productividad.

Happy coding! @SaturPimentel

compartir en

Saturnino Pimentel
Escrito por
Saturnino Pimentel
Software developer