Tri élégant de tableaux dans Go avec des comparateurs de champs personnalisés
Trier un tableau de structures en fonction d'un champ spécifique peut être une tâche courante dans la programmation Go . Explorons un moyen efficace et personnalisable d'y parvenir.
Le problème :
Étant donné un tableau de structures comme le 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"` }
Comment pouvons-nous trier ce tableau par le champ Axis ?
Le Solution :
Depuis Go 1.8, la fonction sort.Slice offre un moyen pratique de trier une tranche à l'aide d'une fonction de comparaison personnalisée. Pour trier le tableau de planètes par axe, nous pouvons utiliser le code suivant :
import "sort" // Define a comparison function to compare planets by their Axis value. var sortByAxis = func(i, j int) bool { return planets[i].Axis < planets[j].Axis } // Create a slice over the array and sort it using the custom comparison function. sort.Slice(planets[:], sortByAxis)
Utilisation de tableaux ou de tranches :
Normalement, il est recommandé d'utiliser des tranches sur les tableaux dans Go car les tranches sont plus flexibles et efficaces. Cependant, dans ce cas, la variable planètes est déclarée sous forme de tableau. Pour que cela fonctionne avec sort.Slice, nous devons le superposer avec une tranche en utilisant des planètes[:].
Tri et maintien de la structure du tableau :
C'est important à noter que l'opération de tri modifie le tableau en place. Si vous souhaitez conserver la structure originale du tableau, vous pouvez créer une copie de la tranche avant de trier :
planetSlice := make([]Planet, len(planets)) copy(planetSlice, planets) sort.Slice(planetSlice, sortByAxis)
Cela vous permet d'utiliser la tranche triée sans affecter le tableau d'origine.
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!