Este dilema se puede solucionar de variadas formas, por lo tanto te enseñamos la que para nosotros es la respuesta más completa.
Solución:
A partir de Go 1.8, hay una manera más fácil de ordenar un segmento que no requiere que defina nuevos tipos. Simplemente pasa una función anónima al sort.Slice
función.
a := []int5, 3, 4, 7, 8, 9
sort.Slice(a, func(i, j int) bool
return a[i] < a[j]
)
for _, v := range a
fmt.Println(v)
Esto se ordenará en orden ascendente, si desea lo contrario, simplemente escriba a[i] > a[j]
en la función anónima.
Estas buscando sort.Reverse
. Eso te permitirá decir:
sort.Sort(sort.Reverse(fooAscending(s)))
Mi respuesta a continuación se basa en la suposición de que el segmento que recibe de un paquete de terceros es del tipo Go básico.
Para clasificar porciones de tipos básicos, utilice las utilidades del paquete de clasificación. Aquí hay un ejemplo que ordena una porción de string y una rebanada de int.
package main
import (
"fmt"
"sort"
)
func main()
sl := []string"mumbai", "london", "tokyo", "seattle"
sort.Sort(sort.StringSlice(sl))
fmt.Println(sl)
intSlice := []int3,5,6,4,2,293,-34
sort.Sort(sort.IntSlice(intSlice))
fmt.Println(intSlice)
La salida de lo anterior es:
[london mumbai seattle tokyo]
[-34 2 3 4 5 6 293]
Vaya a Go Playground aquí para probarlo usted mismo.
Algunas cosas a tener en cuenta:
-
Ordenar tipos básicos de Go no requiere implementar funciones como Len() que pertenecen a sort.Interface. Debe tomar esa ruta solo para tipos compuestos.
-
Simplemente envuelva el tipo de un tipo básico utilizando un proveedor de método de interfaz adecuado, por ejemplo, StringSlice, IntSlice o Float64Slice, y ordene.
-
El segmento se ordena en el lugar y, por lo tanto, no devuelve una copia del segmento ordenado.