Maison  >  Article  >  développement back-end  >  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
Mary-Kate Olsenoriginal
2024-10-27 06:18:29328parcourir

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>

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>

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>

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>

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