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
Mary-Kate OlsenOriginal
2024-12-22 15:26:15641Durchsuche

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"`
}

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!

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