Maison  >  Article  >  développement back-end  >  Comment trier les chaînes sans tenir compte de la casse dans Go ?

Comment trier les chaînes sans tenir compte de la casse dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 18:41:30208parcourir

How to Sort Strings Case-Insensitively in Go?

Tri insensible à la casse à l'aide de sort.Strings() dans Go

Dans Go, la fonction sort.Strings() est utilisée pour trier une liste de chaînes. Cependant, il ne propose pas d'option de tri insensible à la casse.

Fonction de comparaison personnalisée

Une façon d'obtenir un tri insensible à la casse consiste à passez une fonction de comparaison personnalisée à sort.Strings(). Cette fonction doit renvoyer vrai si la première chaîne doit précéder la deuxième chaîne dans l'ordre de tri.

Le code suivant montre comment procéder :

<code class="go">package main

import (
    "fmt"
    "sort"
)

func main() {
    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>

Cette approche crée une nouvelle chaîne pour chaque comparaison, ce qui peut être inefficace pour les grandes listes de chaînes.

Comparaison rune par rune

Pour éviter les allocations, une approche plus efficace consiste à comparer les chaînes rune par rune, en les convertissant en minuscules à la volée :

<code class="go">sort.Slice(data, func(i, j int) bool {
    for {
        rb, nb := utf8.DecodeRuneInString(data[j])
        if nb == 0 {
            return false
        }
        ra, na := utf8.DecodeRuneInString(data[i])
        if na == 0 {
            return true
        }
        rb = unicode.ToLower(rb)
        ra = unicode.ToLower(ra)
        if ra != rb {
            return ra < rb
        }
        data[i] = data[i][na:]
        data[j] = data[j][nb:]
    }
})</code>

Tri spécifique à la langue

Le package Collate dans Go fournit des fonctions plus avancées pour la langue- des ordres de tri spécifiques ou spécifiques à une culture.

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