Bagaimanakah anda mengisih sekeping struct dengan kepingan bersarang dalam Go berdasarkan berbilang kriteria?

DDD
Lepaskan: 2024-10-28 21:10:03
asal
945 orang telah melayarinya

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

Mengisih Sekeping Struktur dengan Kepingan Bersarang

Dalam Go, anda boleh mengisih kepingan struct tersuai menggunakan pakej isihan terbina dalam. Pertimbangkan kod berikut yang mentakrifkan dua struct, Ibu Bapa dan Anak, yang mewakili hubungan ibu bapa-anak:

<code class="go">type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}</code>
Salin selepas log masuk

Anggapkan anda mempunyai sepotong struct Ibu Bapa dan ingin mengisihnya berdasarkan dua kriteria:

Kriteria Isih:

  1. Isih hirisan Induk mengikut Parent.id dalam tertib menaik.
  2. Untuk setiap Ibu Bapa, susun anak-anak yang dihiris mengikut Anak. id dalam tertib menaik dalam induk.

Penyelesaian:

Coretan kod yang disediakan menangani keperluan pengisihan:

``
// isih setiap Ibu Bapa dalam ibu bapa hiris mengikut Id
isih.Isih(ibu bapa, func(i, j int) bool {

return parents[i].id < parents[j].id })
Salin selepas log masuk

// untuk setiap Ibu Bapa, isih setiap Anak dalam kanak-kanak dihiris mengikut Id
untuk _, ibu bapa := julat ibu bapa {

sort.Slice(parent.children, func(i, j int) bool { 
    return parent.children[i].id < parent.children[j].id })
Salin selepas log masuk

}
``

Isi. Fungsi slice beroperasi secara langsung pada kepingan, menghapuskan keperluan untuk bekas perantaraan.

  1. Ia menyusun kepingan ibu bapa berdasarkan Parent.id.
  2. Untuk setiap ibu bapa dalam kepingan ibu bapa yang diisih, ia menyusun kepingan kanak-kanak berdasarkan Child.id menggunakan gelung bersarang.

Hasilnya sejajar dengan output yang dijangkakan:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah anda mengisih sekeping struct dengan kepingan bersarang dalam Go berdasarkan berbilang kriteria?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!