Maison  >  Article  >  développement back-end  >  Comment réaliser un tri insensible à la casse dans Go avec sort.Strings() ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 10:34:02124parcourir

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

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

En Python, le tri insensible à la casse est souvent réalisé à l'aide du paramètre clé de la fonction sorted(), qui permet des fonctions de comparaison personnalisées. Cependant, dans sort.Strings() de Go, il n'y a pas d'équivalent direct.

Pour effectuer un tri insensible à la casse dans Go, nous pouvons exploiter les puissantes capacités de découpage de Go. Une approche consiste à créer une fonction de comparaison personnalisée qui compare les versions minuscules des chaînes :

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

Cette méthode fonctionne bien pour les petits ensembles de données, mais elle peut entraîner des allocations de chaînes excessives pour les entrées volumineuses.

Pour un tri plus efficace, on peut comparer les chaînes rune par rune en ignorant leur casse :

<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:]
    }
}

sort.Strings(data, func(i, j int) bool {
    return lessLower(data[i], data[j])
})</code>

Cette approche évite les allocations inutiles en comparant directement les runes des chaînes.

Pour plus de flexibilité et un tri spécifique à la langue, envisagez d'utiliser le package collate, qui fournit des paramètres régionaux et des règles de classement spécifiques à la langue.

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!

Déclaration:
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