Heim >Backend-Entwicklung >Golang >Wie erreicht man mit sort.Strings() in Golang eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung?
Groß-/Kleinschreibung nicht berücksichtigendes Sortieren mit sort.Strings() in Golang
In Go ist die Funktion sort.Strings() eine einfache und vielseitiges Werkzeug zum Sortieren von String-Slices. Bei der Sortierreihenfolge wird jedoch standardmäßig die Groß-/Kleinschreibung beachtet. Um eine Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen, müssen wir ihr eine benutzerdefinierte Vergleichsfunktion zur Verfügung stellen.
Python-Äquivalent
In Python kann eine Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung mithilfe von erreicht werden Schlüsselparameter der Funktion sorted(), wie im folgenden Code gezeigt:
<code class="python">li = sorted(data, key=lambda s: s.lower())</code>
Go-Implementierung
Das Äquivalent dieses Python-Codes in Go kann erreicht werden Verwenden von sort.Slice() und einer benutzerdefinierten Less-Funktion:
<code class="go">sort.Slice(data, func(i, j int) bool { return strings.ToLower(data[i]) < strings.ToLower(data[j]) })</code>
Dieser Code erstellt ein neues Slice namens data und sortiert es mithilfe der bereitgestellten Less-Funktion. Die Funktion „less“ vergleicht die kleingeschriebenen Versionen der Zeichenfolgen an den Indizes i und j. Dadurch wird sichergestellt, dass Zeichenfolgen mit identischer Darstellung in Kleinbuchstaben als gleich betrachtet werden.
Runenbasierter Vergleich
Während der obige Ansatz für kleine Listen funktioniert, kann er für große Listen ineffizient sein aufgrund der Zuweisung neuer Zeichenfolgen für jeden Vergleich. Um dies zu optimieren, können wir Zeichenfolgen Rune für Rune vergleichen:
<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 } // Trim rune from the beginning of each string. sa = sa[na:] sb = sb[nb:] } } ⋮ sort.Slice(data, func(i, j int) bool { return lessLower(data[i], data[j]) })</code>
Dieser Code vergleicht die kleingeschriebenen Versionen der Runen in jeder Zeichenfolge und gibt „true“ zurück, wenn die kleingeschriebene Version der ersten Zeichenfolge kleiner als die der ist zweite Zeichenfolge.
Sprachbewusste Sortierung
Während die oben genannten Ansätze eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung ermöglichen, berücksichtigen sie keine sprach- oder kulturspezifischen Regeln. Sehen Sie sich für solche Szenarien das Paket „Collate“ für die gebietsbezogene Sortierung an.
Das obige ist der detaillierte Inhalt vonWie erreicht man mit sort.Strings() in Golang eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!