Maison > développement back-end > Golang > Comment trier une tranche de structures par plusieurs champs dans Go ?

Comment trier une tranche de structures par plusieurs champs dans Go ?

Mary-Kate Olsen
Libérer: 2024-10-29 20:07:30
original
617 Les gens l'ont consulté

How to Sort a Slice of Structs by Multiple Fields in Go?

Tri des objets de tranche selon plusieurs champs

Tri selon plusieurs critères

Considérez les structures parent et enfant suivantes :

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}
Copier après la connexion

Supposons que nous ayons une tranche de structures Parent avec des valeurs prédéfinies :

parents := []Parent{
    {
        "3",
        []Child{
            {"2"},
            {"3"},
            {"1"},
        },
    },
    {
        "1",
        []Child{
            {"8"},
            {"9"},
            {"7"},
        },
    },
    {
        "2",
        []Child{
            {"5"},
            {"6"},
            {"4"},
        },
    },
}
Copier après la connexion

Exigences de tri :

Notre objectif est de trier la tranche parents en fonction de deux critères :

  1. Trier les structures parents par ordre croissant de leur champ d'identification.
  2. Dans chaque structure parent, trier les tranches enfants par ordre croissant de leur champ d'identification.

Solution :

Pour réaliser ce tri, nous utilisons la fonction sort.Slice, qui offre un moyen flexible de trier les tranches en fonction de fonctions de comparaison personnalisées. Voici le code :

<code class="go">// Sort parents by their ID
sort.Slice(parents, func(i, j int) bool { return parents[i].id < parents[j].id })

// Iterate over each parent and sort their children by ID
for _, parent := range parents {
    sort.Slice(parent.children, func(i, j int) bool { return parent.children[i].id < parent.children[j].id })
}</code>
Copier après la connexion

Cet algorithme de tri gère efficacement les deux critères, garantissant que la tranche des parents est ordonnée comme souhaité.

Résultat attendu :

La tranche triée doit ressembler à la structure suivante :

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]
Copier après la connexion

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 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