Heim > Backend-Entwicklung > Golang > Wie sortiere ich Strukturen in Go nach mehreren Parametern (Nachname, dann Vorname)?

Wie sortiere ich Strukturen in Go nach mehreren Parametern (Nachname, dann Vorname)?

Susan Sarandon
Freigeben: 2024-12-16 17:34:14
Original
620 Leute haben es durchsucht

How to Sort Structs in Go by Multiple Parameters (LastName then FirstName)?

Sortieren von Strukturen mit mehreren Sortierparametern

Bei der Arbeit mit Arrays oder Slices von Strukturen kann das Sortieren nach mehreren Parametern eine häufige Anforderung sein. In diesem Leitfaden werden verschiedene Ansätze zum Sortieren von Strukturen auf der Grundlage mehrerer Parameter untersucht, wobei der Schwerpunkt auf der spezifischen Notwendigkeit der Sortierung sowohl nach Nachname als auch nach Vorname liegt.

Verwendung von „slices.SortFunc“ für prägnante Sortierung

In Go 1.22 und höher bietet die Funktion „slices.SortFunc“ eine übersichtliche und lesbare Lösung zum Sortieren von Slices. Als Argument wird eine benutzerdefinierte Vergleichsfunktion verwendet, mit der Sie die Sortierkriterien definieren können. Zum Sortieren nach Nachname und dann Vorname können Sie die Funktionen cmp.Or und cmp.Compare verwenden:

slices.SortFunc(members, func(a, b Member) int {
    return cmp.Or(
        cmp.Compare(a.LastName, b.LastName),
        cmp.Compare(a.FirstName, b.FirstName),
    )
})
Nach dem Login kopieren

Nutzung von sort.Slice für einfacheres Sortieren

Die Funktion sort.Slice bietet eine Einfache Möglichkeit, Scheiben zu sortieren. Als Argumente werden ein Slice und eine Vergleichsfunktion benötigt. Die Vergleichsfunktion sollte „true“ zurückgeben, wenn ihr erstes Argument kleiner als ihr zweites Argument ist, andernfalls „false“. Um nach Nachname und dann nach Vorname zu sortieren, können Sie die folgende Vergleichsfunktion erstellen:

sort.Slice(members, func(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
})
Nach dem Login kopieren

Verwendung von sort.Sort für mehr Flexibilität

Ein anderer Ansatz ist die Verwendung der Funktion sort.Sort, die nimmt einen Wert an, der die Schnittstelle sort.Interface implementiert. Diese Schnittstelle erfordert drei Methoden: Len(), Swap() und Less(). Die Less()-Methode ist dieselbe wie die Vergleichsfunktion, die in den vorherigen Ansätzen verwendet wurde.

type byLastFirst []Member

func (members byLastFirst) Len() int           { return len(members) }
func (members byLastFirst) Swap(i, j int)      { members[i], members[j] = members[j], members[i] }
func (members byLastFirst) Less(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
}

sort.Sort(byLastFirst(members))
Nach dem Login kopieren

Auswahl des richtigen Ansatzes

Welcher Ansatz am besten geeignet ist, hängt von Ihrer spezifischen Anwendung und Ihren Leistungsanforderungen ab. Sofern die Leistung kein kritischer Faktor ist, wird empfohlen, den bequemsten Ansatz basierend auf Lesbarkeit und Wartung zu wählen.

Das obige ist der detaillierte Inhalt vonWie sortiere ich Strukturen in Go nach mehreren Parametern (Nachname, dann Vorname)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage