Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erreicht man eine Sortierung von String-Listen ohne Berücksichtigung der Groß-/Kleinschreibung in Go?

Wie erreicht man eine Sortierung von String-Listen ohne Berücksichtigung der Groß-/Kleinschreibung in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-28 06:57:29946Durchsuche

How to Achieve Case-Insensitive Sorting of String Lists in Go?

Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung mit sort.Strings() in Go

Zum Sortieren von Zeichenfolgenlisten in Go ohne Berücksichtigung der Groß- und Kleinschreibung sollten Sie die Verwendung von sort in Betracht ziehen. Slice() bietet eine größere Flexibilität als sort.Strings().

Benutzerdefinierte Funktion für den Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung

Sie können eine benutzerdefinierte Funktion an sort.Slice übergeben (), um Vergleiche ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen. Die folgende Funktion wandelt Zeichenfolgen in Kleinbuchstaben um, bevor sie verglichen werden:

<code class="go">func lowercaseCompare(s1, s2 string) bool {
    return strings.ToLower(s1) < strings.ToLower(s2)
}</code>

Anwenden der benutzerdefinierten Funktion

So sortieren Sie die Listendaten mithilfe der benutzerdefinierten Funktion ohne Berücksichtigung der Groß- und Kleinschreibung:

<code class="go">sort.Slice(data, lowercaseCompare)</code>

Beispiel

Betrachten Sie die String-Listendaten := []string{"A", "b", "D", "c"}. Wenn Sie es mit der benutzerdefinierten Funktion ohne Berücksichtigung der Groß- und Kleinschreibung sortieren, erhalten Sie das Ergebnis ["A", "b", "c", "D"].

Effiziente Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung

Der obige Ansatz weist für jeden Vergleich zwei neue Zeichenfolgen zu. Bei großen Stringlisten kann dies ineffizient sein. Um die Leistung zu verbessern, ziehen Sie einen Runen-für-Rune-Vergleich in Betracht:

<code class="go">func runeCompare(a, b string) bool {
    for {
        r1, s1 := utf8.DecodeRuneInString(a)
        r2, s2 := utf8.DecodeRuneInString(b)
        if r1 == utf8.RuneError || r1 == r2 {
            return s1 < s2
        }
        a = a[s1:]
        b = b[s2:]
    }
}</code>

Effiziente Sortierung mit runeCompare()

Um Daten effizient zu sortieren:

<code class="go">sort.Slice(data, runeCompare)</code>

Alternative Lösung: Paket sortieren

Für eine sprach- oder kulturspezifische Sortierung sollten Sie die Verwendung des Pakets collate in Betracht ziehen. Es bietet gebietsbezogene Sortierfunktionen.

Das obige ist der detaillierte Inhalt vonWie erreicht man eine Sortierung von String-Listen ohne Berücksichtigung der Groß-/Kleinschreibung in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn