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.
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 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 }
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.
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 }
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.
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!