Rumah >pembangunan bahagian belakang >Golang >Bagaimana Anda Boleh Semak Kehadiran Elemen dalam Go Slices Secara Umum?

Bagaimana Anda Boleh Semak Kehadiran Elemen dalam Go Slices Secara Umum?

DDD
DDDasal
2024-10-31 08:44:01347semak imbas

How Can You Check for Element Presence in Go Slices Generically?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn