Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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?

王林
王林ke hadapan
2024-02-14 10:30:09955semak imbas

如何在 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()
}

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

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()
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam