Pendekatan Generik untuk Pengesanan Elemen dalam Go Slices
In Go, menentukan sama ada kepingan mengandungi elemen tertentu boleh menjadi tugas biasa. Walaupun tiada kaedah terbina dalam untuk ini, anda boleh menulis kod generik yang mencapai fungsi ini.
Pendekatan Antara Muka:
Pada mulanya, anda boleh mempertimbangkan menggunakan jenis antara muka{} untuk mewakili elemen yang tidak diketahui. Walau bagaimanapun, pendekatan ini mempunyai had, kerana ia memerlukan penegasan jenis untuk membandingkan elemen individu.
Pendekatan Berasaskan Refleksi:
Penyelesaian yang lebih komprehensif melibatkan penggunaan refleksi untuk mengakses elemen slice dan bandingkan dengan nilai yang dikehendaki. Berikut ialah pelaksanaan:
<code class="go">func Contains(slice, elem interface{}) bool { sv := reflect.ValueOf(slice) // Check slice type validity if sv.Kind() != reflect.Slice && sv.Kind() != reflect.Array { return false } // Iterate over the slice for i := 0; i < sv.Len(); i++ { // Compare elem with current element if elem == sv.Index(i).Interface() { return true } } // Element not found return false }</code>
Pendekatan berasaskan pantulan ini menyediakan penyelesaian generik, membolehkan anda menyemak kehadiran elemen dalam mana-mana kepingan, tanpa mengira jenis elemennya. Walau bagaimanapun, ia disertakan dengan penalti prestasi yang ketara berbanding dengan fungsi jenis elemen tertentu disebabkan oleh overhed pantulan tambahan.
Pertimbangan Prestasi:
Menanda aras generik Mengandungi() fungsi terhadap setara bukan generik menunjukkan kelembapan yang ketara, kira-kira 50-60 kali lebih perlahan dalam contoh ini.
Contoh Penggunaan:
Contoh berikut menunjukkan penggunaan fungsi Mengandungi():
<code class="go">si := []int{3, 4, 5, 10, 11} ss := []string{"hello", "world", "foo", "bar"} fmt.Println(Contains(si, 3)) // true fmt.Println(Contains(si, 100)) // false fmt.Println(Contains(ss, "hello")) // true fmt.Println(Contains(ss, "baz")) // false</code>
Atas ialah kandungan terperinci Bagaimana Anda Boleh Semak Kehadiran Elemen dalam Go Slices Secara Umum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!