"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo ordenar una porción de estructuras por múltiples campos en Go?

¿Cómo ordenar una porción de estructuras por múltiples campos en Go?

Publicado el 2024-11-15
Navegar:782

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

Ordenar objetos de sector por múltiples campos

Ordenar por múltiples criterios

Considere las siguientes estructuras padre e hijo:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

Supongamos que tenemos una porción de estructuras principales con valores predefinidos:

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

Requisitos de clasificación:

Nuestro objetivo es ordenar el segmento principal según dos criterios:

  1. Ordenar las estructuras principales en orden ascendente de su campo de identificación.
  2. Dentro de cada estructura principal, ordene los sectores secundarios en orden ascendente de la identificación campo.

Solución:

Para lograr esta clasificación, utilizamos la función sort.Slice, que proporciona una forma flexible de ordenar sectores según una comparación personalizada. funciones. Aquí está el código:

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

Este algoritmo de clasificación maneja eficientemente ambos criterios, asegurando que el segmento principal esté ordenado como se desea.

Resultado esperado:

El segmento ordenado debe se parecen a la siguiente estructura:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3