Heim >Backend-Entwicklung >Golang >Wie sortiere ich Strukturen in Go mithilfe mehrerer Parameter?

Wie sortiere ich Strukturen in Go mithilfe mehrerer Parameter?

Linda Hamilton
Linda HamiltonOriginal
2024-12-11 10:03:17161Durchsuche

How to Sort Structs in Go Using Multiple Parameters?

So sortieren Sie Strukturen mit mehreren Parametern

In Go ist es beim Sortieren eines Teils von Strukturen oft nützlich, mehrere Sortierparameter zu berücksichtigen. Beispielsweise möchten wir möglicherweise Mitglieder zuerst nach ihrem Nachnamen und dann nach ihrem Vornamen sortieren.

Eine Möglichkeit, dies zu erreichen, ist die Verwendung der in Go 1.22 eingeführten Funktion „slices.SortFunc“. Mit „slices.SortFunc“ können wir eine benutzerdefinierte Vergleichsfunktion angeben:

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

Hier verwenden wir cmp.Or, um sowohl Nachnamen- als auch Vornamenvergleiche anzuwenden. cmp.Compare gibt eine Ganzzahl zurück, die Gleichheit (0), größer als (1) oder kleiner als (-1) angibt.

Eine weitere Option, die seit Go 1.8 verfügbar ist, ist die Verwendung von sort.Slice oder sort. Sortierfunktionen mit einer benutzerdefinierten Less-Funktion:

sort.Sort(byLastFirst(members))

Hier definieren wir einen benutzerdefinierten byLastFirst-Typ, der die Methoden Len, Swap und Less implementiert sort.Interface-Schnittstelle. Die Less-Methode prüft für Vergleiche sowohl den Nachnamen als auch den Vornamen.

Welcher Ansatz Sie wählen, hängt von der von Ihnen verwendeten Go-Version und dem Komfort ab, den sie für Ihre spezifische Anwendung bietet. Sofern sich das Sortieren jedoch nicht als Leistungsengpass erweist, wird im Allgemeinen der bequemste Ansatz bevorzugt.

Das obige ist der detaillierte Inhalt vonWie sortiere ich Strukturen in Go mithilfe mehrerer Parameter?. 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