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

Bagaimana untuk Mengisih Struktur mengikut Pelbagai Parameter dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-16 12:20:11
asal
320 orang telah melayarinya

How to Sort Structs by Multiple Parameters in Go?

Isih Struktur dengan Pelbagai Parameter

Soalan:

Bagaimanakah susunan struct boleh diisih mengikut berbilang parameter, khususnya dengan nama keluarga dan kemudian nama pertama dalam Pergi?

Jawapan:

Terdapat beberapa pendekatan untuk mengisih struct dengan berbilang parameter dalam Go.

Go 1.22 with slices.SortFunc

Versi terkini Go (1.22 dan lebih baru) menawarkan penyelesaian ringkas menggunakan kepingan.SortFunc:

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

isih.Isih atau isih.Fungsi Isih

Untuk versi Go yang terdahulu, pertimbangkan untuk menggunakan isihan.Slice atau sort.Isih. Kedua-duanya memerlukan fungsi kurang tersuai yang menentukan susunan berdasarkan parameter yang diingini.

Dengan isihan.Slice:

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

Dengan isihan.Isih:

Buat jenis tersuai yang melaksanakan isihan. Antara muka antara muka, mentakrifkan Len, Kaedah Tukar dan Kurangkan.

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:

Walaupun pendekatan ini menyediakan cara yang berbeza untuk mengisih struct, analisis prestasi adalah penting untuk dioptimumkan untuk hot spot. Pilih pendekatan yang paling sesuai dengan keperluan aplikasi anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Struktur mengikut Pelbagai Parameter dalam Go?. 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