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