Saltar al contenido

golang ordenar segmento ascendente o descendente

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:

  1. 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.

  2. 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.

  3. El segmento se ordena en el lugar y, por lo tanto, no devuelve una copia del segmento ordenado.

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *