Bagaimanakah Saya Boleh Mengakses Rune Rawak dengan Cekap dalam Go String?

DDD
Lepaskan: 2024-11-25 07:49:10
asal
925 orang telah melayarinya

How Can I Efficiently Access a Random Rune in a Go String?

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]
}
Salin selepas log masuk

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!

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