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

Bagaimana untuk Mengisih Structs dalam Go dengan Pelbagai Parameter (Nama Akhir kemudian Nama Pertama)?

Susan Sarandon
Lepaskan: 2024-12-16 17:34:14
asal
562 orang telah melayarinya

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

Isih Struktur dengan Berbilang Parameter Isih

Apabila bekerja dengan tatasusunan atau kepingan struct, mengisihnya mengikut berbilang parameter boleh menjadi keperluan biasa. Panduan ini meneroka pendekatan yang berbeza untuk mengisih struktur berdasarkan berbilang parameter, memfokuskan pada keperluan khusus untuk mengisih mengikut Nama Akhir dan Nama Pertama.

Menggunakan kepingan.SortFunc untuk Isih Ringkas

In Go 1.22 dan lebih baru , fungsi slices.SortFunc menawarkan penyelesaian yang ringkas dan boleh dibaca untuk menyusun kepingan. Ia memerlukan fungsi perbandingan tersuai sebagai hujah, membolehkan anda menentukan kriteria isihan. Untuk mengisih mengikut Nama Akhir dan kemudian Nama Pertama, anda boleh menggunakan fungsi cmp.Or dan cmp.Bandingkan:

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

Memanfaatkan isihan.Slice untuk Isih Lebih Mudah

Fungsi isihan.Slice menyediakan cara mudah untuk menyusun kepingan. Ia memerlukan kepingan dan fungsi perbandingan sebagai hujah. Fungsi perbandingan harus kembali benar jika hujah pertamanya kurang daripada hujah kedua, dan palsu sebaliknya. Untuk mengisih mengikut LastName dan kemudian FirstName, anda boleh mencipta fungsi perbandingan berikut:

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

Menggunakan isihan.Isih untuk Lebih Fleksibiliti

Pendekatan lain ialah menggunakan fungsi isihan.Isih, yang mengambil nilai yang melaksanakan jenis.Antara muka antara muka. Antara muka ini memerlukan tiga kaedah: Len(), Swap(), dan Less(). Kaedah Less() adalah sama dengan fungsi perbandingan yang digunakan dalam pendekatan sebelumnya.

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

Memilih Pendekatan yang Tepat

Pendekatan mana yang terbaik bergantung pada keperluan aplikasi dan prestasi khusus anda. Melainkan prestasi merupakan faktor kritikal, memilih pendekatan yang paling mudah berdasarkan kebolehbacaan dan penyelenggaraan adalah disyorkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Structs dalam Go dengan Pelbagai Parameter (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