Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengisih Structs dalam Go mengikut Pelbagai Kriteria (Nama Akhir kemudian Nama Pertama)?

Bagaimana untuk Mengisih Structs dalam Go mengikut Pelbagai Kriteria (Nama Akhir kemudian Nama Pertama)?

Linda Hamilton
Lepaskan: 2024-12-09 20:07:19
asal
230 orang telah melayarinya

How to Sort Structs in Go by Multiple Criteria (LastName then FirstName)?

Isih Struktur dengan Berbilang Kriteria

Dalam Go, mengisih sekeping struct boleh dicapai menggunakan pelbagai pendekatan. Perbincangan ini menumpukan pada pengisihan mengikut berbilang parameter, khususnya oleh Nama Akhir dan kemudian Nama Pertama.

Kaedah 1: slices.SortFunc (Go 1.22 )

For Go 1.22 dan ke atas, slices.SortFunc menyediakan yang elegan penyelesaian:

slices.SortFunc(members, func(a, b Member) int {
    return cmp.Or(
        cmp.Compare(a.LastName, b.LastName),
        cmp.Compare(a.FirstName, b.FirstName),
    )
})
Salin selepas log masuk

Kaedah 2: Isih.Isih atau isih.Isih

Dalam Go 1.8 , isih.Isih atau isih.Isih boleh digunakan. Kedua-duanya memerlukan fungsi yang kurang untuk menentukan pesanan. Fungsi ini membandingkan medan Nama Akhir dan Nama Pertama:

sort.Slice(members, func(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
})
Salin selepas log masuk

Untuk isihan.Isih, jenis tersuai yang melaksanakan isihan.Antaramuka diperlukan:

type byLastFirst []Member

func (members byLastFirst) Len() int           { return len(members) }
func (members byLastFirst) Swap(i, j int)      { members[i], members[j] = members[j], members[i] }
func (members byLastFirst) Less(i, j int) bool { 
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName }

sort.Sort(byLastFirst(members))
Salin selepas log masuk

Pertimbangan Prestasi

Pilih pendekatan yang paling sesuai dengan keperluan aplikasi anda. Melainkan analisis prestasi mendedahkan pengisihan sebagai hambatan, kemudahan harus diutamakan.

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Structs dalam Go mengikut Pelbagai Kriteria (Nama Akhir kemudian Nama Pertama)?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan