Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mencapai Pengisihan Tidak Peka Huruf dengan sort.Strings() dalam Golang?
Isih Tidak Peka Huruf dengan Isihan.Strings() dalam Golang
In Go, fungsi sort.Strings() ialah mudah dan alat serba boleh untuk menyusun kepingan rentetan. Walau bagaimanapun, secara lalai, susunan pengisihannya adalah sensitif huruf besar-besaran. Untuk melaksanakan pengisihan tidak peka huruf besar-besaran, kita perlu menyediakannya dengan fungsi perbandingan tersuai.
Setara Python
Dalam Python, pengisihan tidak sensitif huruf besar boleh dicapai menggunakan parameter utama fungsi sorted(), seperti yang ditunjukkan dalam kod berikut:
<code class="python">li = sorted(data, key=lambda s: s.lower())</code>
Pelaksanaan Go
Persamaan kod Python ini dalam Go boleh dicapai menggunakan sort.Slice() dan fungsi kurang tersuai:
<code class="go">sort.Slice(data, func(i, j int) bool { return strings.ToLower(data[i]) < strings.ToLower(data[j]) })</code>
Kod ini mencipta kepingan baharu yang dipanggil data dan mengisihnya menggunakan fungsi kurang yang disediakan. Fungsi kurang membandingkan versi huruf kecil rentetan pada indeks i dan j. Ini memastikan rentetan dengan perwakilan huruf kecil yang sama dianggap sama.
Perbandingan Berasaskan Rune
Walaupun pendekatan di atas berfungsi untuk senarai kecil, pendekatan ini boleh menjadi tidak cekap untuk senarai besar disebabkan peruntukan rentetan baru untuk setiap perbandingan. Untuk mengoptimumkan ini, kita boleh membandingkan rentetan rune demi rune:
<code class="go">func lessLower(sa, sb string) bool { for { rb, nb := utf8.DecodeRuneInString(sb) if nb == 0 { return false } ra, na := utf8.DecodeRuneInString(sa) if na == 0 { return true } rb = unicode.ToLower(rb) ra = unicode.ToLower(ra) if ra != rb { return ra < rb } // Trim rune from the beginning of each string. sa = sa[na:] sb = sb[nb:] } } ⋮ sort.Slice(data, func(i, j int) bool { return lessLower(data[i], data[j]) })</code>
Kod ini membandingkan versi huruf kecil rune dalam setiap rentetan dan mengembalikan benar jika versi huruf kecil rentetan pertama adalah kurang daripada versi rentetan rentetan kedua.
Isih Sedar Bahasa
Walaupun pendekatan di atas menyediakan pengisihan tidak peka huruf besar-besaran, ia tidak mengambil kira peraturan khusus bahasa atau budaya. Untuk senario sebegitu, rujuk pakej susun untuk pengisihan yang sedar setempat.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Pengisihan Tidak Peka Huruf dengan sort.Strings() dalam Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!