Maison > développement back-end > Golang > le corps du texte

Comment réaliser un tri insensible à la casse avec sort.Strings() dans Golang ?

Susan Sarandon
Libérer: 2024-10-31 04:25:01
original
709 Les gens l'ont consulté

How to Achieve Case-Insensitive Sorting with sort.Strings() in Golang?

Tri insensible à la casse avec sort.Strings() dans Golang

Dans Go, la fonction sort.Strings() est une fonction simple et outil polyvalent pour trier les tranches de cordes. Cependant, par défaut, son ordre de tri est sensible à la casse. Pour effectuer un tri insensible à la casse, nous devons lui fournir une fonction de comparaison personnalisée.

Équivalent Python

En Python, un tri insensible à la casse peut être réalisé en utilisant le paramètre clé de la fonction sorted(), comme indiqué dans le code suivant :

<code class="python">li = sorted(data, key=lambda s: s.lower())</code>
Copier après la connexion

Go Implémentation

L'équivalent de ce code Python dans Go peut être réalisé en utilisant sort.Slice() et une fonction less personnalisée :

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

Ce code crée une nouvelle tranche appelée data et le trie en utilisant la fonction less fournie. La fonction less compare les versions minuscules des chaînes aux indices i et j. Cela garantit que les chaînes avec des représentations minuscules identiques sont considérées comme égales.

Comparaison basée sur les runes

Bien que l'approche ci-dessus fonctionne pour les petites listes, elle peut être inefficace pour les grandes listes. en raison de l'allocation de nouvelles chaînes pour chaque comparaison. Pour optimiser cela, on peut comparer les chaînes rune par 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>
Copier après la connexion

Ce code compare les versions minuscules des runes dans chaque chaîne et renvoie vrai si la version minuscule de la première chaîne est inférieure à celle de la deuxième chaîne.

Tri sensible au langage

Bien que les approches ci-dessus fournissent tri insensible à la casse, ils ne prennent pas en compte les règles spécifiques à la langue ou à la culture. Pour de tels scénarios, reportez-vous au package Collate pour un tri tenant compte des paramètres régionaux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!