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!