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

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

Patricia Arquette
Lepaskan: 2024-12-12 17:36:12
asal
266 orang telah melayarinya

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

Cara Isih Struktur dengan Berbilang Parameter

Dalam pengaturcaraan, selalunya perlu mengisih data berdasarkan berbilang kriteria. Dalam Go, ini boleh dicapai dengan berkesan menggunakan fungsi pengisihan tersuai.

Masalah:
Bagaimanakah anda mengisih sepotong struct mengikut LastName dan kemudian FirstName?

Penyelesaian menggunakan kepingan.SortFunc (Pergi 1.22 ):

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

Penyelesaian ini menggunakan fungsi slice.SortFunc untuk membandingkan struct mengikut medan Nama Akhir dan FirstName mereka dalam susunan tersebut.

Penyelesaian menggunakan isihan.Slice atau sort.Isih:

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

Kedua-dua penyelesaian membandingkan medan Nama Akhir dahulu. Jika mereka sama, mereka membandingkan medan Nama Pertama. Hasilnya ialah sekeping ahli yang diisih mengikut kedua-dua medan.

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