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
DDDoriginal
2024-10-28 02:24:01249parcourir

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>

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>

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>

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>

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>

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!

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