«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как отсортировать фрагмент структур по нескольким полям в Go?

Как отсортировать фрагмент структур по нескольким полям в Go?

Опубликовано 15 ноября 2024 г.
Просматривать:115

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

Сортировка объектов-срезов по нескольким полям

Сортировка по нескольким критериям

Рассмотрим следующие родительские и дочерние структуры:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

Предположим, у нас есть фрагмент родительских структур с предопределенными значениями:

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

Требования к сортировке:

Наша цель — отсортировать родительский срез по двум критериям:

  1. Сортировать родительские структуры в порядке возрастания их поля id.
  2. В каждой родительской структуре отсортируйте дочерние фрагменты в порядке возрастания поля id.

Решение:

Чтобы добиться такой сортировки, мы используем функцию sort.Slice, которая обеспечивает гибкий способ сортировки срезов на основе пользовательских функций сравнения. Вот код:

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

Этот алгоритм сортировки эффективно обрабатывает оба критерия, обеспечивая желаемый порядок родительского среза.

Ожидаемый результат:

Отсортированный срез должен напоминают следующую структуру:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3