Maison > développement back-end > Golang > Comment trier une tranche de structures avec des champs de tranche imbriqués dans Go ?

Comment trier une tranche de structures avec des champs de tranche imbriqués dans Go ?

Mary-Kate Olsen
Libérer: 2024-10-27 06:18:29
original
447 Les gens l'ont consulté

How to Sort a Slice of Structs with Nested Slice Fields in Go?

Tri par champs de tranches

Dans Go, vous pouvez rencontrer des scénarios dans lesquels vous devez trier des tranches de structures contenant d'autres champs de tranches imbriqués. Prenons l'exemple ci-dessous :

<code class="go">type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}</code>
Copier après la connexion

Supposons que vous ayez une tranche de structures Parent avec les valeurs suivantes :

<code class="go">parents := make([]Parent, 0)

p1 := Parent {
    "3",
    []Child {
        {"2"},
        {"3"},
        {"1"},
    },
}

p2 := Parent {
    "1",
    []Child {
        {"8"},
        {"9"},
        {"7"},
    },
}

p3 := Parent {
    "2",
    []Child {
        {"5"},
        {"6"},
        {"4"},
    },
}             

parents = append(parents, p1, p2, p3)</code>
Copier après la connexion

L'objectif est de trier la tranche des parents en fonction de deux critères :

  1. Tout d'abord, triez par Parent.id.
  2. Au sein de chaque parent, triez la tranche des enfants par Child.id.

Solution :

Pour obtenir le tri souhaité, vous pouvez utiliser la fonction sort.Slice pour trier la tranche parent et les tranches enfants imbriquées. Voici le code :

<code class="go">// sort each Parent in the parents slice by Id
sort.Slice(parents, func(i, j int) bool {return parents[i].id < parents[j].id})

// for each Parent, sort each Child in the children slice 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

Ce code trie d'abord la tranche des parents, garantissant que les parents sont classés par ordre croissant en fonction de leur champ d'identification. Par la suite, pour chaque parent, il trie les tranches des enfants de la même manière.

Résultat attendu :

<code class="go">[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]</code>
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!

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