Go Equivalent to C's memset
Soalan Asal:
Adakah terdapat kaedah dalam Go yang serupa dengan fungsi memset C, yang membolehkan permulaan yang cekap tatasusunan dengan bukan sifar nilai?
Jawapan:
Go tidak menawarkan persamaan langsung dengan memset dalam perpustakaan standardnya. Walau bagaimanapun, terdapat beberapa pendekatan yang boleh mencapai kefungsian yang serupa:
Penyelesaian Berasaskan Gelung:
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
Gelung mudah ini berulang pada tatasusunan dan memberikan nilai v kepada setiap elemen.
Penggunaan Penyelesaian Dioptimumkan copy():
Fungsi copy() Go sangat dioptimumkan dan boleh digunakan untuk tujuan ini:
func memsetRepeat(a []int, v int) { if len(a) == 0 { return } a[0] = v for bp := 1; bp < len(a); bp *= 2 { copy(a[bp:], a[:bp]) } }
Penyelesaian ini menetapkan elemen pertama secara manual dan kemudian berulang kali menyalin bahagian dimulakan tatasusunan pada elemen yang tinggal.
Prestasi Perbandingan:
Tanda aras menunjukkan bahawa penyelesaian memsetRepeat mengatasi pendekatan berasaskan gelung untuk tatasusunan yang lebih besar disebabkan oleh fungsi copy() yang dioptimumkan.
Untuk meringkaskan, pengaturcara Go boleh menggunakan sama ada penyelesaian berasaskan gelung untuk kesederhanaan atau penyelesaian memsetRepeat yang dioptimumkan untuk prestasi yang lebih baik apabila memulakan tatasusunan dengan bukan sifar nilai.
Atas ialah kandungan terperinci Go's Equivalent to C's memset: Bagaimana Memulakan Tatasusunan dengan Cekap dengan Nilai Bukan Sifar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!