Maison >développement back-end >Golang >Comment trier les chaînes sans tenir compte de la casse dans 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!