Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk menulis fungsi dalam Golang untuk membalikkan rentetan unicode menggunakan hanya 1 tugasan/operasi?

Bagaimana untuk menulis fungsi dalam Golang untuk membalikkan rentetan unicode menggunakan hanya 1 tugasan/operasi?

王林
Lepaskan: 2024-02-14 10:30:09
ke hadapan
973 orang telah melayarinya

如何在 Golang 中编写函数来仅使用 1 个分配/操作来反转 unicode 字符串?

Editor PHP Zimo akan membimbing anda melalui cara menulis fungsi dalam Golang untuk membalikkan rentetan unikod menggunakan hanya 1 tugasan/operasi. Membalikkan rentetan adalah operasi biasa, tetapi di Golang kita boleh mencapai kesannya menggunakan hanya 1 tugasan/operasi dengan cara yang bijak. Kaedah ini adalah berdasarkan fakta bahawa rentetan tidak boleh diubah Kita boleh menukar rentetan menjadi kepingan rune dan kemudian membalikkan rentetan dengan menukar elemen dalam kepingan. Seterusnya, mari kita lihat kaedah pelaksanaan khusus!

Kandungan soalan

Saya perlu menulis simulasi reverse.Reverse saya sendiri untuk rentetan unicode. Ini kod saya:

func Reverse(input string) string {
    runes := []rune(input)

    var result strings.Builder
    result.Grow(len(runes))

    for i := len(runes) - 1; i >= 0; i-- {
        result.WriteRune(runes[i])
    }

    return result.String()
}
Salin selepas log masuk

Tetapi ia menghasilkan 2 tugasan/operasi:

cpu: 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz
BenchmarkReverse
BenchmarkReverse-16       297900              7014 ns/op            1792 B/op          2 allocs/op
Salin selepas log masuk

Bagaimana nak buat 1 peruntukan/operasi sahaja? Saya tahu, ia mungkin

Dan saya juga tidak faham mengapa result.Grow(len(runes)) 使 5 个分配/操作和 result.Grow(len(input)) - 1 tugasan/operasi

Penyelesaian

Buat rentetan.Pembina dengan kapasiti yang diperlukan. Menulis rune dari rentetan sumber kepada pembina dalam susunan terbalik.

func Reverse(str string) string {
    var result strings.Builder
    result.Grow(len(str))
    for len(str) > 0 {
        r, size := utf8.DecodeLastRuneInString(str)
        result.WriteRune(r)
        str = str[:len(str)-size]
    }
    return result.String()
}
Salin selepas log masuk

https://www.php.cn/link/6acfe16b984d473723a8495a84e548b7

Jawapan ini mereplikasi fungsi dalam soalan. Saya rasa tidak masuk akal untuk hasilnya dipaparkan kepada manusia sebagai glyph. Sebagai contoh, menggabungkan aksara tidak bergabung seperti rentetan mentah.

Berikut ialah contoh rekaan yang menggambarkan penggunaan fungsi terbalik: Set nilai tertentu aplikasi cenderung mempunyai kunci rentetan dengan awalan biasa dan akhiran luar biasa. Aplikasi boleh meningkatkan pengagihan ruang rentetan dengan membalikkan kekunci.

Atas ialah kandungan terperinci Bagaimana untuk menulis fungsi dalam Golang untuk membalikkan rentetan unicode menggunakan hanya 1 tugasan/operasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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