Dalam pembangunan program Golang, rentetan ialah jenis data yang sangat biasa. Mereka ada di mana-mana, sama ada anda membaca kandungan daripada rangkaian atau membaca teks daripada fail, rentetan hampir selalu terlibat. Pembalikan rentetan juga merupakan masalah yang sering perlu ditangani. Artikel ini akan meneroka cara menggunakan Golang untuk pembalikan rentetan.
1. Asas pembalikan rentetan
Dalam Golang, rentetan terdiri daripada satu atau lebih aksara dan setiap aksara diwakili oleh titik kod Unikod. Rentetan dalam Golang tidak boleh diubah, yang bermaksud bahawa apabila anda cuba mengubah suai aksara dalam rentetan, anda sebenarnya mencipta rentetan baharu dan bukannya menukar rentetan asal. Pembalikan rentetan tidak terkecuali, dan rentetan baharu perlu dibuat untuk menyimpan hasil terbalik.
Kod pembalikan rentetan asas adalah seperti berikut:
func ReverseString(s string) string { r := []rune(s) for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 { r[i], r[j] = r[j], r[i] } return string(r) }
Kod di atas menukar rentetan menjadi kepingan rune dengan menggunakan jenis []rune
supaya aksara dalam rentetan itu boleh diakses secara langsung. Gunakan penunjuk berganda (i dan j) untuk mengulangi aksara, menukar aksara ke-i ke kedudukan ke-j.
2. Pembalikan rentetan lanjutan
Kod di atas melaksanakan pembalikan rentetan asas, tetapi ia tidak cukup cekap dalam sesetengah kes. Oleh kerana pembalikan rentetan mencipta rentetan baharu, mencipta dan mengisi rentetan baharu mungkin mengambil lebih banyak masa daripada membalikkan aksara secara terus.
Pembalikan rentetan lanjutan boleh dioptimumkan dengan menggunakan tatasusunan bait. Panjang tatasusunan bait adalah sama dengan panjang rentetan asal, dan boleh diterbalikkan terus dalam tatasusunan bait asal, mengelakkan kos masa dan ruang untuk mencipta rentetan baharu. Apabila melakukan pembalikan rentetan, rentetan itu perlu ditukar kepada tatasusunan bait, tetapi memandangkan rentetan dalam Go boleh mengandungi jujukan bait berbilang, pengekodan perlu ditentukan sebelum penukaran. Contoh berikut menunjukkan cara untuk membalikkan rentetan UTF-8:
func ReverseString(s string) string { b := []byte(s) n := len(b) for i := 0; i < n/2; i++ { b[i], b[n-i-1] = b[n-i-1], b[i] } return string(b) }
di mana jenis []byte
digunakan untuk menukar rentetan kepada tatasusunan bait. Gunakan penunjuk berganda (i dan n-i-1) untuk mengulangi tatasusunan bait, menukar bait ke-i ke kedudukan n-i-1.
3. Ujian penanda aras
Untuk mengukur prestasi dua kaedah pembalikan rentetan yang berbeza, berikut akan menjalankan ujian penanda aras:
func BenchmarkReverseString(b *testing.B) { s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" for i := 0; i < b.N; i++ { ReverseString(s) } } func BenchmarkReverseString2(b *testing.B) { s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" for i := 0; i < b.N; i++ { ReverseString2(s) } }
Dalam pembangunan program Golang , Ujian penanda aras ialah cara penting untuk menguji prestasi Satu siri fungsi ujian disediakan dalam pakej testing
untuk kami gunakan. Dua fungsi, ReverseString
dan ReverseString2
, digunakan di sini untuk menanda aras pembalikan rentetan UTF-8. Rentetan ujian ialah rentetan 26 huruf kecil dan 26 huruf besar.
Selepas melaksanakan penanda aras dan membandingkan keputusan:
go test -bench=. BenchmarkReverseString-8 3509301 331 ns/op BenchmarkReverseString2-8 45815326 25.2 ns/op
Keputusan menunjukkan bahawa menggunakan tatasusunan bait untuk pembalikan rentetan adalah jauh lebih baik daripada menggunakan hirisan rune untuk kaedah pembalikan rentetan adalah lebih cekap.
4. Ringkasan
Dalam artikel ini, kami memperkenalkan dua kaedah pembalikan rentetan dalam Golang, satu menggunakan penghirisan rune dan satu lagi menggunakan perkataan Array of sections. Kami juga menyediakan kod penanda aras yang pendek tetapi boleh dilaksanakan untuk mengukur prestasi kedua-dua kaedah. Jika rentetan yang perlu diproses adalah lebih kecil, maka kita boleh membalikkan rentetan menggunakan kaedah asas. Walau bagaimanapun, untuk rentetan yang lebih panjang atau apabila operasi songsang yang cekap diperlukan, kita harus membalikkan rentetan menggunakan kaedah berasaskan tatasusunan bait lanjutan.
Atas ialah kandungan terperinci Cara melakukan pembalikan rentetan menggunakan Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!