Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh melakukan pengisihan rentetan yang tidak peka huruf besar-besaran dalam Go menggunakan fungsi `sort.Strings()`?

Bagaimanakah saya boleh melakukan pengisihan rentetan yang tidak peka huruf besar-besaran dalam Go menggunakan fungsi `sort.Strings()`?

DDD
DDDasal
2024-10-28 02:24:01131semak imbas

How can I perform case-insensitive sorting of strings in Go using the `sort.Strings()` function?

Isih Tidak Peka Huruf dengan isihan.Strings() dalam Go

Dalam Go, anda boleh mengisih senarai rentetan dalam kes -cara tidak sensitif menggunakan fungsi sort.Strings() dengan fungsi perbandingan tersuai. Fungsi tersuai ini membandingkan rentetan menggunakan hasil penukaran rentetan kepada huruf kecil.

Contoh:

<code class="go">data := []string{"A", "b", "D", "c"}
sort.Strings(data) // Default case-sensitive sorting
fmt.Println(data) // Output: [A b c D]</code>

Untuk mencapai pengisihan tidak peka huruf besar-kecil, kita boleh menentukan tersuai fungsi seperti berikut:

<code class="go">sort.Slice(data, func(i, j int) bool {
    return strings.ToLower(data[i]) < strings.ToLower(data[j])
})</code>

Fungsi ini menukarkan kedua-dua rentetan kepada huruf kecil sebelum membandingkannya, menghasilkan tertib pengisihan tidak sensitif huruf besar dan kecil.

Menjalankan kod yang dikemas kini:

<code class="go">data := []string{"A", "b", "D", "c"}
sort.Slice(data, func(i, j int) bool {
    return strings.ToLower(data[i]) < strings.ToLower(data[j])
})
fmt.Println(data) // Output: [A b c D]</code>

Alternatif:

Walaupun pendekatan di atas berkesan, ia boleh melibatkan peruntukan rentetan semasa perbandingan. Untuk mengelakkan peruntukan, pendekatan alternatif ialah membandingkan rentetan rune demi rune sambil menukar setiap rune kepada huruf kecil:

<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
        }
        sa = sa[na:]
        sb = sb[nb:]
    }
}</code>

Anda kemudiannya boleh menggunakan fungsi lessLower ini untuk mengisih rentetan secara tidak sensitif huruf besar:

<code class="go">sort.Slice(data, func(i, j int) bool { return lessLower(data[i], data[j]) })</code>

Untuk pesanan isihan khusus bahasa atau budaya, pertimbangkan untuk menggunakan pakej susun.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan pengisihan rentetan yang tidak peka huruf besar-besaran dalam Go menggunakan fungsi `sort.Strings()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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