Mencari elemen dalam kepingan selalunya boleh melibatkan gelung berulang. Walau bagaimanapun, terdapat kaedah alternatif untuk mengoptimumkan proses ini.
Walaupun Go tidak menyediakan kaedah slice.contains() terbina dalam, mencipta satu kaedah agak mudah. Anda boleh mentakrifkan fungsi seperti:
func Contains[T comparable](s []T, v T) bool { for _, item := range s { if item == v { return true } } return false }
Untuk kepingan yang lebih besar, pertimbangkan untuk menggunakan algoritma carian binari daripada pakej isihan. Ia menyemak elemen tengah dan mengecilkan carian secara rekursif berdasarkan hasil, menghasilkan prestasi yang lebih baik untuk hirisan yang diisih:
func BinaryContains[T comparable](s []T, v T) bool { i := sort.Search(len(s), func(i int) bool { return s[i] >= v }) return i < len(s) && s[i] == v }
Jika anda kerap melakukan mengandungi semakan pada kepingan , pertimbangkan untuk menggunakan peta. Peta dalam Go menawarkan carian nilai kunci yang cekap. Dengan menggunakan struct kosong{} sebagai jenis nilai, anda boleh mencipta peta yang berfungsi sebagai satu set dengan berkesan:
type Set[T comparable] map[T]struct{} func NewSet[T comparable]() *Set[T] { return new(Set[T]) } func (s *Set[T]) Add(v T) { (*s)[v] = struct{}{} } func (s *Set[T]) Contains(v T) bool { _, ok := (*s)[v] return ok }
Dengan memanfaatkan peta atau mengoptimumkan carian kepingan, anda boleh menyemak kewujudan elemen dalam Go dengan cekap. hirisan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Elemen dalam Go Slices dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!