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

Как отсортировать фрагменты структур с вложенными фрагментами в Go на основе нескольких критериев?

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

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

Сортировка фрагмента структур с помощью вложенных фрагментов

В Go вы можете сортировать фрагменты пользовательских структур с помощью встроенного пакета сортировки. Рассмотрим следующий код, который определяет две структуры, Parent и Child, представляющие отношения родитель-потомок:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

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

Критерии сортировки:

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

Решение:

Приведенный фрагмент кода отвечает требованиям сортировки:

``
/ / сортируем каждого родителя в родительском срезе по идентификатору
sort.Slice(parents, func(i, j int) bool {

return parents[i].id 

// для каждого родителя отсортируйте каждого дочернего элемента в дочернем срезе по идентификатору
for _, родительский := диапазон родителей {

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

}
``

Функция sort.Slice напрямую работает со срезами, исключая необходимы промежуточные контейнеры.

  1. Он сортирует родительский срез на основе Parent.id.
  2. Для каждого родительского элемента в отсортированном родительском срезе он сортирует дочерний срез на основе Child.id с использованием вложенного цикла.

Результат соответствует ожидаемому выводу:

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

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

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

Copyright© 2022 湘ICP备2022001581号-3