Maison > développement back-end > Golang > Comment puis-je effectuer un tri des chaînes sans distinction de casse dans Go à l'aide de la fonction « sort.Strings() » ?

Comment puis-je effectuer un tri des chaînes sans distinction de casse dans Go à l'aide de la fonction « sort.Strings() » ?

DDD
Libérer: 2024-10-28 02:24:01
original
212 Les gens l'ont consulté

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

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

Dans Go, il est possible de trier une liste de chaînes dans une casse -de manière insensible en utilisant la fonction sort.Strings() avec une fonction de comparaison personnalisée. Cette fonction personnalisée compare les chaînes en utilisant les résultats de la conversion des chaînes en minuscules.

Exemple :

<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>
Copier après la connexion

Pour obtenir un tri insensible à la casse, nous pouvons définir la personnalisation fonctionnent comme suit :

<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

Cette fonction convertit les deux chaînes en minuscules avant de les comparer, ce qui entraîne un ordre de tri insensible à la casse.

Exécution du code mis à jour :

<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>
Copier après la connexion

Alternatives :

Bien que l'approche ci-dessus soit efficace, elle peut impliquer des allocations de chaînes lors des comparaisons. Pour éviter les allocations, une approche alternative consiste à comparer les chaînes rune par rune tout en convertissant chaque rune en minuscules :

<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>
Copier après la connexion

Vous pouvez ensuite utiliser cette fonction lessLower pour trier les chaînes sans tenir compte de la casse :

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

Pour les ordres de tri spécifiques à une langue ou à une culture, envisagez d'utiliser le package Collate.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal