Mengakses Elemen Rune Rawak Rentetan Dengan Cekap
Dalam Go, rentetan diwakili sebagai jujukan bait berkod UTF-8. Untuk mengakses elemen rune pada indeks tertentu, seseorang boleh mengulangi melalui rentetan menggunakan gelung untuk ... julat. Walau bagaimanapun, kaedah ini boleh menjadi tidak cekap untuk akses yang kerap.
Sebab ketidakcekapan ini ialah rentetan Go tidak diindeks secara langsung ke atas rune. Untuk mengekstrak rune, urutan bait UTF-8 mesti dinyahkodkan. Penyahkodan overhed ini menjadi ketara jika fungsi dipanggil berbilang kali.
Untuk mengoptimumkan prestasi, adalah disyorkan untuk mengelak daripada menggunakan rentetan dan sebaliknya menggunakan []hirisan rune. Slices diindeks dengan cekap, membolehkan akses terus ke rune. Jika jenis input tidak boleh ditukar, cache boleh dilaksanakan untuk menyimpan dekod []perwakilan rune bagi rentetan.
Berikut ialah versi diubah suai bagi fungsi yang disediakan yang menggunakan cache:
var cache = map[string][]rune{} func RuneAt(s string, idx int) rune { rs := cache[s] if rs == nil { rs = []rune(s) cache[s] = []rune(s) } if idx >= len(rs) { return 0 } return rs[idx] }
Cache menyimpan perwakilan []rune yang dinyahkodkan bagi rentetan untuk mengelakkan penyahkodan berulang. Pendekatan ini boleh meningkatkan prestasi dengan ketara jika RuneAt() dipanggil dengan set rentetan terhad.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Rune Rawak dengan Cekap dalam Go String?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!