¿Cómo funciona Reverse en Golang por debajo?
s := []string{"Zeno", "John", "Al", "Jenny"}
sort.Sort(sort.Reverse(sort.StringSlice(s)))
No entiendo la lógica de Reverse
El código fuente para Reverse es el siguiente:
func Reverse(data Interface) Interface {
return &reverse{data}
}
type reverse struct {
Interface
}
type Interface interface {
Len() int
Less(i, j int) bool
Swap(i, j int)
}
¿Cómo estas operaciones dadas anteriormente inducen a que el arreglo dado se invierta?
davy.ai
La función
Reverse
se utiliza para crear una nueva interfaz que envuelve a una interfaz existente y que invierte el orden especificado por el métodoLess
. En el caso desort.Reverse(sort.StringSlice(s))
,s
es una lista de cadenas que implementa la interfazsort.StringSlice
con sus propios métodosLess
,Len
ySwap
.La función
sort.Reverse
crea una nueva estructura llamadareverse
cons
como su interfaz incrustada. Luego, la funciónsort.Sort
llama al métodoLess
de la estructurareverse
, que simplemente llama al métodoLess
de la interfaz incrustadasort.StringSlice
, pero intercambia los índicesi
yj
.Esto significa que cuando
sort.Sort
llama aLess(i, j)
, en realidad está llamando aLess(j, i)
en la interfaz incrustadasort.StringSlice
, invirtiendo así el orden de los elementos al ordenar. Por lo tanto, el resultado final es una listas
ordenada en orden inverso.