Heim > Backend-Entwicklung > Golang > Wie kann ich ein Go-Struct-Array effizient nach einem benutzerdefinierten Feld sortieren?

Wie kann ich ein Go-Struct-Array effizient nach einem benutzerdefinierten Feld sortieren?

Mary-Kate Olsen
Freigeben: 2024-12-22 15:26:15
Original
600 Leute haben es durchsucht

How Can I Efficiently Sort a Go Struct Array by a Custom Field?

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"`
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

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