Maison >développement back-end >Golang >Comment puis-je trier efficacement un tableau Go de structures par nom de champ personnalisé ?

Comment puis-je trier efficacement un tableau Go de structures par nom de champ personnalisé ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 18:10:10245parcourir

How Can I Efficiently Sort a Go Array of Structs by a Custom Field Name?

Tri efficace des tableaux par noms de champs personnalisés

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.

Énoncé du problème

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 ?

Solution

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.

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn