Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mencari Elemen dalam Go Slices dengan Cekap?

Bagaimanakah Saya Boleh Mencari Elemen dalam Go Slices dengan Cekap?

Barbara Streisand
Lepaskan: 2024-12-21 14:47:16
asal
483 orang telah melayarinya

How Can I Efficiently Search for Elements in Go Slices?

Carian Elemen Cekap dalam Kepingan

Mencari elemen dalam kepingan selalunya boleh melibatkan gelung berulang. Walau bagaimanapun, terdapat kaedah alternatif untuk mengoptimumkan proses ini.

Penyelesaian Terbina dalam

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
}
Salin selepas log masuk

Carian Binari

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
}
Salin selepas log masuk

Peta untuk Set

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
}
Salin selepas log masuk

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!

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