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

Comment puis-je trier efficacement un tableau Go Struct par un champ personnalisé ?

Mary-Kate Olsen
Libérer: 2024-12-22 15:26:15
original
554 Les gens l'ont consulté

How Can I Efficiently Sort a Go Struct Array by a Custom Field?

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"`
}
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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!

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