"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment trier une tranche de structures par plusieurs champs dans Go ?

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

Publié le 2024-11-15
Parcourir:566

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
}

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"},
        },
    },
}

Exigences de tri :

Notre objectif est de trier la tranche des 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, triez les tranches enfants par ordre croissant du champ d'identification.

Solution :

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

// Sort parents by their ID
sort.Slice(parents, func(i, j int) bool { return parents[i].id 

Cet algorithme de tri gère efficacement les deux critères, garantissant que la tranche parent 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}]}]
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3