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), ) })
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 })
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))
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!