Bagaimana untuk Mencapai Pengisihan Tidak Peka Huruf dengan sort.Strings() dalam Golang?

Susan Sarandon
Lepaskan: 2024-10-31 04:25:01
asal
709 orang telah melayarinya

How to Achieve Case-Insensitive Sorting with sort.Strings() in 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>
Salin selepas log masuk

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!