"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 classificar uma fatia de estruturas por vários campos no Go?

Como classificar uma fatia de estruturas por vários campos no Go?

Publicado em 15/11/2024
Navegar:261

How to Sort a Slice of Structs by Multiple Fields in Go?

Classificando objetos Slice por vários campos

Classificando por vários critérios

Considere as seguintes estruturas pai e filho:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

Suponha que temos uma fatia de estruturas Parent com valores predefinidos:

parents := []Parent{
    {
        "3",
        []Child{
            {"2"},
            {"3"},
            {"1"},
        },
    },
    {
        "1",
        []Child{
            {"8"},
            {"9"},
            {"7"},
        },
    },
    {
        "2",
        []Child{
            {"5"},
            {"6"},
            {"4"},
        },
    },
}

Requisitos de classificação:

Nosso objetivo é classificar a fatia pai com base em dois critérios:

  1. Classificar estruturas pai em ordem crescente de seu campo de id.
  2. Dentro de cada estrutura Parent, classifique a fatia filha em ordem crescente do campo de id.

Solução:

Para conseguir essa classificação, utilizamos a função sort.Slice, que fornece uma maneira flexível de classificar fatias com base em funções de comparação personalizadas. Aqui está o código:

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

Esse algoritmo de classificação lida com ambos os critérios com eficiência, garantindo que a fatia pai seja ordenada conforme desejado.

Resultado esperado:

A fatia classificada deve assemelham-se à seguinte estrutura:

[{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