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