Mengakses Elemen Rune Rawak dalam Rentetan
Masalah
Bagaimana elemen rune rawak dalam rentetan boleh diakses dengan cekap tanpa bergantung pada "untuk ... julat" gelung?
Latar Belakang
Go strings menyimpan jujukan bait berkod UTF-8. Walaupun gelung "untuk ... julat" membenarkan penyahkodan dan mendapatkan semula rune yang cekap, mengakses rune melalui fungsi langsung seperti "str.At(i)" tidak tersedia. Ini menyebabkan pembangun mencari kaedah alternatif untuk akses rune yang kerap.
Penyelesaian
Seperti yang dinyatakan dalam respons yang disediakan, had berikut dikenakan:
Pengesyoran
Untuk pengoptimuman prestasi, pertimbangkan untuk menukar input rentetan kepada sekeping rune ([]rune) jika akses rune diperlukan dengan kerap. Tidak seperti rentetan, yang merupakan kepingan bait baca sahaja dengan berkesan, kepingan rune membenarkan pengindeksan yang cekap.
Alternatif
Jika penukaran input tidak dapat dilaksanakan, cache boleh dilaksanakan untuk memetakan rentetan kepada kepingan rune yang sepadan. Ini meningkatkan prestasi untuk kes yang melibatkan set kecil rentetan berulang. Walau bagaimanapun, untuk rentetan yang unik atau jarang, caching boleh menjadi tidak cekap dan menggunakan memori yang berlebihan.
Contoh
Coretan kod berikut menunjukkan pelaksanaan cache mudah untuk pengambilan rune:
import ( "fmt" "sync" ) var cache = sync.Map{} func RuneAt(s string, idx int) rune { rs, ok := cache.Load(s) if !ok { rs = []rune(s) cache.Store(s, rs) } if idx >= len(rs) { return 0 } return rs[idx] } func main() { str := "你好,世界!" for i := 0; i < len(str); i++ { fmt.Printf("%c ", RuneAt(str, i)) } }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Larian Rawak dengan Cekap dalam Go Strings Tanpa Menggunakan For Loops?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!