Maison >développement back-end >Golang >Comment puis-je trier efficacement un tableau Go de structures par nom de champ personnalisé ?
Le tri des structures de données est une tâche fondamentale en programmation, et Go propose différentes approches pour gérer cela. En particulier, les tableaux de structures posent un défi lors du tri basé sur des noms de champs arbitraires.
Considérez le code Go suivant :
type Planet struct { Name string `json:"name"` Aphelion float64 `json:"aphelion"` // in million km Perihelion float64 `json:"perihelion"` // in million km Axis int64 `json:"Axis"` // in km Radius float64 `json:"radius"` } func main() { planets := [...]Planet{{"Mars", 249.2, 206.7, 227939100, 3389.5}, {"Venus", 108.939, 107.477, 108208000, 6051.8}, {"Earth", 151.930, 147.095, 149598261, 6371.0}} }
Comment pouvons-nous trier les planètes rangées par le champ Axis ?
Dans les versions récentes de Go, le La fonction sort.Slice fournit un moyen efficace de trier les tranches en fonction d'une fonction de comparaison personnalisée.
sort.Slice(planets[:], func(i, j int) bool { return planets[i].Axis < planets[j].Axis })
Ici, i et j sont des indices d'éléments dans la tranche, et la fonction de comparaison renvoie vrai si l'élément à index je devrais venir avant l’élément à l’index j. Dans ce cas, nous comparons les champs d'axe des planètes.
Notez que lors de l'utilisation de tableaux (par opposition aux tranches), l'opérateur de superposition de tranche [:] est requis pour convertir le tableau en tranche.
En tirant parti de sort.Slice, nous obtenons un tri simple et efficace de tableaux de structures basé sur des noms de champs arbitraires. Cela fournit une expérience de type Python pour trier des structures de données complexes dans Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!