Maison > développement back-end > Golang > Comment puis-je trier efficacement des tableaux de structures dans Go ?

Comment puis-je trier efficacement des tableaux de structures dans Go ?

Patricia Arquette
Libérer: 2024-12-30 09:12:12
original
452 Les gens l'ont consulté

How Can I Efficiently Sort Arrays of Structs in Go?

Tri de tableaux élégant dans Go

Lorsqu'il s'agit de tableaux de structures, le tri devient crucial. Dans Go, nous pouvons exploiter la fonction sort.Slice introduite dans Go 1.8 pour y parvenir sans effort.

Exemple :

Considérons un tableau de structures Planet :

type Planet struct {
    Name       string
    Aphelion   float64
    Perihelion float64
    Axis       int64
    Radius     float64
}
Copier après la connexion

Tri par axe :

Pour trier ce tableau par le champ Axis, on peut utiliser le code suivant :

sort.Slice(planets, func(i, j int) bool {
  return planets[i].Axis < planets[j].Axis
})
Copier après la connexion

Cette fonction prend une tranche comme premier argument et une fonction de comparaison comme deuxième argument. La fonction de comparaison détermine comment les éléments doivent être triés. Dans ce cas, la fonction de comparaison renvoie vrai si la valeur de l'axe à l'index i est inférieure à la valeur de l'axe à l'index j, indiquant que l'élément en i doit être trié avant l'élément en j.

Attention aux tableaux :

Lorsque nous travaillons avec des tableaux, nous devons les convertir en tranches avant d'utiliser sort.Slice. En effet, les tableaux sont de taille fixe et ne peuvent pas être redimensionnés dynamiquement, contrairement aux tranches.

sort.Slice(planets[:], func(i, j int) bool {
  return planets[i].Axis < planets[j].Axis
})
Copier après la connexion

En ajoutant la syntaxe [:] à la tranche, nous créons effectivement une tranche qui recouvre le tableau. Cela nous permet de modifier le tableau à travers la tranche.

Cette approche élégante et simple simplifie le tri des tableaux dans Go, le rendant aussi simple que son homologue Python, où sorted(planets, key=lambda n: n.Axis ) obtient le même résultat.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal