Maison > développement back-end > Golang > 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
Libérer: 2024-10-28 18:41:30
original
351 Les gens l'ont consulté

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

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

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!

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