"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como você classifica uma fatia de estruturas com fatias aninhadas em Go com base em vários critérios?

Como você classifica uma fatia de estruturas com fatias aninhadas em Go com base em vários critérios?

Publicado em 2024-11-08
Navegar:500

How do you sort a slice of structs with nested slices in Go based on multiple criteria?

Classificando uma fatia de estruturas com fatias aninhadas

No Go, você pode classificar fatias de estruturas personalizadas usando o pacote de classificação integrado. Considere o código a seguir que define duas estruturas, Pai e Filho, representando um relacionamento pai-filho:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

Suponha que você tenha uma fatia de estruturas Parent e queira classificá-las com base em dois critérios:

Critérios de classificação:

  1. Classificar a fatia Pai por Parent.id em ordem crescente.
  2. Para cada Pai, classifique a fatia filha por Child.id em ordem crescente dentro do pai.

Solução:

O snippet de código fornecido atende ao requisito de classificação:

``
// classifique cada Parent na fatia dos pais por Id
sort.Slice(parents, func (i, j int) bool {

return parents[i].id 

// para cada Pai, classifique cada Filho na fatia de filhos por Id
for _, pai := range pais {

sort.Slice(parent.children, func(i, j int) bool { 
    return parent.children[i].id 

}
``

A função sort.Slice opera diretamente em fatias, eliminando o necessidade de contêineres intermediários.

  1. Ele classifica a fatia dos pais com base em Parent.id.
  2. Para cada pai na fatia dos pais classificada, ele classifica a fatia dos filhos com base em Child.id usando um loop aninhado.

O resultado se alinha com a saída esperada:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3