Bagaimanakah anda menyemak kehadiran elemen dalam kepingan jenis yang berbeza dalam Go?

Linda Hamilton
Lepaskan: 2024-11-02 03:11:30
asal
274 orang telah melayarinya

How do you check for element presence in slices of different types in Go?

Cara Semak Kehadiran Elemen Secara Umum dalam Slice dalam Go

In Go, menentukan sama ada kepingan mengandungi elemen tertentu boleh menjadi senario biasa. Walau bagaimanapun, tiada kaedah terbina dalam untuk melakukan semakan generik ini merentas jenis kepingan yang berbeza.

Percubaan Gagal dengan Antara Muka{}

Percubaan untuk menggunakan antara muka{ } taip sebagai penyelesaian generik, seperti yang ditunjukkan di bawah, mungkin kelihatan munasabah:

<code class="go">func sliceContains(slice []interface{}, elem interface{}) bool {
    for _, item := range slice {
       if item == elem {
          return true
       }
    }
    return false
}</code>
Salin selepas log masuk

Walau bagaimanapun, membandingkan nilai pelbagai jenis (antara muka{}) boleh membawa kepada hasil yang salah.

Penyelesaian Generik dengan Refleksi

Untuk mencapai penyelesaian yang benar-benar generik, refleksi boleh digunakan. Fungsi berikut menggunakan pantulan untuk mengulangi hirisan dan membandingkan setiap elemen dengan elemen sasaran:

<code class="go">func Contains(slice, elem interface{}) bool {

    sv := reflect.ValueOf(slice)

    // Check that slice is actually a slice/array.
    if sv.Kind() != reflect.Slice && sv.Kind() != reflect.Array {
        return false
    }

    // Iterate the slice
    for i := 0; i < sv.Len(); i++ {

        // Compare elem to the current slice element
        if elem == sv.Index(i).Interface() {
            return true
        }
    }

    // Nothing found
    return false
}</code>
Salin selepas log masuk

Penyelesaian ini membolehkan anda melakukan semakan elemen generik pada kepingan apa-apa jenis.

Pertimbangan Prestasi

Walaupun fungsi Mengandungi generik menyediakan fungsi yang diingini, ia datang pada kos prestasi yang ketara. Penandaarasan terhadap fungsi setara bukan generik menghasilkan faktor kelembapan lebih kurang 50x. Oleh itu, adalah penting untuk menilai implikasi prestasi sebelum menggunakan refleksi untuk semakan elemen generik.

Atas ialah kandungan terperinci Bagaimanakah anda menyemak kehadiran elemen dalam kepingan jenis yang berbeza dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!