Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengisih Sepotong Struktur mengikut Pelbagai Medan dalam Go?

Bagaimana untuk Mengisih Sepotong Struktur mengikut Pelbagai Medan dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 20:07:30590semak imbas

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

Isih Objek Slice mengikut Pelbagai Medan

Isih Mengikut Pelbagai Kriteria

Pertimbangkan struct Ibu Bapa dan Anak berikut:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

Katakan kita mempunyai sekeping struct Induk dengan nilai yang dipratentukan:

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

Keperluan Isih:

Matlamat kami adalah untuk mengisih hirisan ibu bapa berdasarkan dua kriteria:

  1. Isih struct Ibu Bapa dalam tertib menaik medan id mereka.
  2. Dalam setiap struct Ibu Bapa, isih kepingan kanak-kanak dalam tertib menaik medan id.

Penyelesaian:

Untuk mencapai pengisihan ini, kami menggunakan fungsi isihan.Slice, yang menyediakan cara yang fleksibel untuk mengisih kepingan berdasarkan fungsi perbandingan tersuai. Berikut ialah kodnya:

<code class="go">// Sort parents by their ID
sort.Slice(parents, func(i, j int) bool { return parents[i].id < parents[j].id })

// Iterate over each parent and sort their children by ID
for _, parent := range parents {
    sort.Slice(parent.children, func(i, j int) bool { return parent.children[i].id < parent.children[j].id })
}</code>

Algoritma pengisihan ini mengendalikan kedua-dua kriteria dengan cekap, memastikan potongan ibu bapa dipesan seperti yang dikehendaki.

Hasil Jangkaan:

Kepingan yang diisih hendaklah menyerupai struktur berikut:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Sepotong Struktur mengikut Pelbagai Medan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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