Elegante Array-Sortierung in Go mit benutzerdefinierten Feldvergleichern
Das Sortieren eines Arrays von Strukturen nach einem bestimmten Feld kann eine häufige Aufgabe bei der Go-Programmierung sein . Lassen Sie uns einen effizienten und anpassbaren Weg erkunden, um dies zu erreichen.
Das Problem:
Angesichts einer Reihe von Strukturen wie der folgenden:
type Planet struct { Name string `json:"name"` Aphelion float64 `json:"aphelion"` // in million km Perihelion float64 `json:"perihelion"` // in million km Axis int64 `json:"Axis"` // in km Radius float64 `json:"radius"` }
Wie können wir dieses Array nach dem Achsenfeld sortieren?
Das Lösung:
Seit Go 1.8 bietet die Funktion sort.Slice eine bequeme Möglichkeit, ein Slice mithilfe einer benutzerdefinierten Vergleichsfunktion zu sortieren. Um das Array der Planeten nach Achse zu sortieren, können wir den folgenden Code verwenden:
import "sort" // Define a comparison function to compare planets by their Axis value. var sortByAxis = func(i, j int) bool { return planets[i].Axis < planets[j].Axis } // Create a slice over the array and sort it using the custom comparison function. sort.Slice(planets[:], sortByAxis)
Arrays vs. Slices verwenden:
Normalerweise wird die Verwendung von Slices empfohlen über Arrays in Go, da Slices flexibler und effizienter sind. In diesem Fall wird die Variable planets jedoch als Array deklariert. Damit es mit sort.Slice funktioniert, müssen wir es mithilfe von Planeten[:] mit einem Slice überlagern.
Sortieren und Verwalten der Array-Struktur:
Das ist wichtig Beachten Sie, dass der Sortiervorgang das Array an Ort und Stelle ändert. Wenn Sie die ursprüngliche Array-Struktur beibehalten möchten, können Sie vor dem Sortieren eine Kopie des Slice erstellen:
planetSlice := make([]Planet, len(planets)) copy(planetSlice, planets) sort.Slice(planetSlice, sortByAxis)
Dadurch können Sie das sortierte Slice verwenden, ohne das ursprüngliche Array zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Go-Struct-Array effizient nach einem benutzerdefinierten Feld sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!