Mengalih keluar Rentetan Pendua atau Integer daripada Slice dalam Go
Masalah:
Anda mempunyai sekeping bandar pelajar yang mungkin mengandungi entri pendua. Anda ingin mencipta penyelesaian generik untuk mengalih keluar semua rentetan pendua daripada mana-mana kepingan.
Penyelesaian Tidak Cekap:
Penyelesaian semasa anda melibatkan menyemak setiap elemen dalam kepingan untuk kewujudan dalam gelung lain, yang tidak cekap untuk kepingan besar.
Penyelesaian Cekap: Menggunakan Peta
Cara yang cekap untuk mengalih keluar pendua ialah menggunakan peta untuk menyimpan elemen unik. Semasa anda mengulangi hirisan, semak sama ada unsur semasa wujud dalam peta. Jika tidak, tambahkannya pada peta dan hasil yang ditapis.
Penyelesaian Generik:
Berikut ialah fungsi generik untuk mengalih keluar pendua daripada mana-mana kepingan, dengan T boleh menjadi mana-mana jenis yang setanding:
func removeDuplicate[T comparable](sliceList []T) []T { allKeys := make(map[T]bool) list := []T{} for _, item := range sliceList { if _, value := allKeys[item]; !value { allKeys[item] = true list = append(list, item) } } return list }
Penyelesaian Khusus untuk Rentetan dan Integer:
Untuk memudahkan kod anda, anda juga boleh mencipta fungsi khusus untuk rentetan dan integer:
func removeDuplicateStr(strSlice []string) []string { // [Remove duplicate code here] } func removeDuplicateInt(intSlice []int) []int { // [Remove duplicate code here] }
Contoh Penggunaan:
studentsCities := []string{"Mumbai", "Delhi", "Ahmedabad", "Mumbai", "Bangalore", "Delhi", "Kolkata", "Pune"} uniqueStudentsCities := removeDuplicate(studentsCities) fmt.Println(uniqueStudentsCities) // Output: ["Mumbai", "Delhi", "Ahmedabad", "Bangalore", "Kolkata", "Pune"]
Menggunakan pendekatan ini, anda boleh mengalih keluar pendua dengan berkesan daripada mana-mana kepingan, tanpa mengira jenisnya.
Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Elemen Pendua dengan Cekap daripada Go Slice?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!