Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Cekap Mencari Elemen dalam Satu Slice Rentetan Yang Tidak Ada dalam Satu Lagi?

Bagaimana untuk Cekap Mencari Elemen dalam Satu Slice Rentetan Yang Tidak Ada dalam Satu Lagi?

Patricia Arquette
Patricia Arquetteasal
2024-12-08 20:43:10146semak imbas

How to Efficiently Find the Elements in One String Slice That Are Not in Another?

Mencari Perbezaan antara Dua Keping Rentetan

Apabila berurusan dengan hirisan rentetan dalam pengaturcaraan, selalunya perlu untuk menentukan perbezaan antara dua set. Pertimbangkan senario berikut:

slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}

Matlamat kami adalah untuk mengenal pasti dan mengeluarkan elemen yang wujud dalam slice1 tetapi tidak dalam slice2.

Menggunakan HashMap untuk Pencarian Cekap

Untuk mengira perbezaan dengan cekap, kami boleh memanfaatkan peta Go. Peta dalam Go menawarkan carian masa tetap (O(1)), yang membolehkan kami menentukan dengan cepat sama ada unsur wujud dalam set.

Pelaksanaan Fungsi perbezaan

Berikut ialah pelaksanaan fungsi perbezaan menggunakan peta:

// difference returns the elements in `a` that aren't in `b`.
func difference(a, b []string) []string {
    mb := make(map[string]struct{}, len(b))
    for _, x := range b {
        mb[x] = struct{}{}
    }
    var diff []string
    for _, x := range a {
        if _, found := mb[x]; !found {
            diff = append(diff, x)
        }
    }
    return diff
}

Memecahkan Fungsi

  • Sebuah peta mb dicipta dengan kapasiti yang sama dengan panjang kepingan2. Peta ini akan menyimpan elemen slice2 sebagai kunci, mencipta set dengan berkesan.
  • Kami mengulangi slice2, menambah setiap elemen sebagai kunci kepada mb.
  • Untuk setiap elemen dalam slice1, kami menyemak jika ia wujud sebagai kunci dalam mb. Jika tidak, kami menambahnya pada kepingan diff, yang akan menyimpan elemen yang unik untuk slice1.
  • Akhir sekali, kami mengembalikan kepingan diff sebagai hasilnya.

Pelaksanaan ini mempunyai anggaran kerumitan masa O(n), dengan n ialah panjang maksimum slice1 dan slice2. Kecekapannya berpunca daripada operasi masa tetap yang dilakukan oleh peta, yang memastikan carian dan sisipan adalah pantas.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Elemen dalam Satu Slice Rentetan Yang Tidak Ada dalam Satu Lagi?. 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