Rumah > pembangunan bahagian belakang > Golang > Cara melaksanakan set dalam golang

Cara melaksanakan set dalam golang

PHPz
Lepaskan: 2023-04-14 09:18:43
asal
1063 orang telah melayarinya

Golang ialah bahasa pengaturcaraan berorientasikan objek yang ditaip secara statik, konkurensi tinggi, dan ia juga merupakan salah satu bahasa yang semakin popular sejak beberapa tahun kebelakangan ini. Di Golang, walaupun tiada jenis Set, kami boleh melaksanakan fungsi Set dengan mudah melalui struktur data asas seperti slice dan map. Artikel ini akan memperkenalkan cara melaksanakan Set dengan Golang.

Definisi Set

Set ialah struktur data tidak tertib dan tidak berulang. Ia menyokong operasi asas set, termasuk menambah elemen, memadamkan elemen, menentukan sama ada unsur wujud, dsb. Dalam Set, tiada hubungan berurutan antara unsur, dan setiap elemen adalah unik.

Slice melaksanakan Set

Slice dalam Golang boleh melaksanakan fungsi Set, kerana elemen dalam Slice disusun dan setiap elemen boleh muncul berulang kali. Kami boleh melaksanakan operasi penyahduplikasian Slice melalui kaedah tersuai untuk mencapai tujuan Set.

type SetSlice []interface{}

func (s *SetSlice) Add(val interface{}) {
    for _, v := range *s {
        if val == v {
            return
        }
    }
    *s = append(*s, val)
}

func (s *SetSlice) Remove(val interface{}) {
    for i, v := range *s {
        if val == v {
            *s = append((*s)[:i], (*s)[i+1:]...)
            return
        }
    }
}

func (s *SetSlice) Contains(val interface{}) bool {
    for _, v := range *s {
        if val == v {
            return true
        }
    }
    return false
}
Salin selepas log masuk

Dalam kod di atas, kami memperibadikan jenis SetSlice dan menambahkan Add, Remove, Contains dan kaedah lain. Apabila memanggil kaedah Tambah, kami mula-mula menyemak sama ada unsur yang sama wujud dengan melintasi Slice, dan kembali terus jika ia wujud sebaliknya, tambah elemen pada Slice apabila memadamkan elemen, kami melintasi Slice untuk mencari elemen yang akan menjadi; dipadam dan lakukan operasi pemadaman; Apabila menentukan sama ada unsur wujud, kami juga melintasi Slice untuk mencari elemen tersebut.

Peta melaksanakan Set

Selain Slice, Map di Golang juga boleh melaksanakan fungsi Set, kerana setiap kunci dalam Peta mestilah unik. Kita boleh menggunakan kunci Peta sebagai nilai elemen, dan menetapkan nilai Peta kepada sebarang nilai.

type SetMap map[interface{}]struct{}

var exist = struct{}{}

func (s SetMap) Add(val interface{}) {
    s[val] = exist
}

func (s SetMap) Remove(val interface{}) {
    delete(s, val)
}

func (s SetMap) Contains(val interface{}) bool {
    _, c := s[val]
    return c
}
Salin selepas log masuk

Dalam kod di atas, kami memperibadikan jenis SetMap dan menambahkan Add, Remove, Contains dan kaedah lain. Apabila memanggil kaedah Tambah, kami terus memasukkan elemen ke dalam Peta sebagai kunci Peta, dan nilainya ialah jenis struct kosong{} apabila memadamkan elemen, kami secara langsung memadamkan kekunci yang sepadan dalam Peta melalui fungsi padam ; apabila menilai sama ada unsur itu wujud, Kami menentukan sama ada unsur itu wujud dengan mengakses kunci yang sepadan dalam Peta.

Ringkasan

Di Golang, walaupun tiada jenis Set, kita boleh merealisasikan fungsi Set melalui struktur data asas seperti slice dan map. Menggunakan slice untuk melaksanakan Set memerlukan deduplikasi manual, yang lebih menyusahkan menggunakan peta untuk melaksanakan Set adalah lebih mudah dan lebih cekap. Sudah tentu, jika kita perlu melakukan operasi yang lebih kompleks pada Set, seperti persimpangan dan kesatuan, adalah disyorkan untuk menggunakan pustaka pihak ketiga, seperti github.com/deckarep/golang-set, yang boleh meningkatkan kecekapan dengan banyak.

Atas ialah kandungan terperinci Cara melaksanakan set dalam golang. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan