Heim >Backend-Entwicklung >Golang >Wie sortiere ich Go-Strukturen nach benutzerdefinierten Feldern mit „sort.Slice'?

Wie sortiere ich Go-Strukturen nach benutzerdefinierten Feldern mit „sort.Slice'?

DDD
DDDOriginal
2024-12-19 06:25:10453Durchsuche

How to Sort Go Structs by Custom Fields Using `sort.Slice`?

Arrays von Strukturen nach benutzerdefinierten Feldnamen in Go sortieren

In Go kann das Sortieren eines Arrays von Strukturen nach einem bestimmten Feld komplex sein Aufgabe, insbesondere wenn Sie einen benutzerdefinierten Schlüssel benötigen. Mit der Einführung von sort.Slice in Go 1.8 ist dieser Prozess jedoch erheblich einfacher geworden.

Stellen Sie sich ein Array von Planet-Strukturen vor, die jeweils Eigenschaften wie Name, Aphel, Perihel, Achse und Radius enthalten. Um diese Planeten nach ihren Achsenwerten zu sortieren, können Sie die Funktion sort.Slice verwenden:

package main

import (
    "log"
    "sort"
)

type Planet struct {
    Name       string
    Aphelion   float64
    Perihelion float64
    Axis       int64
    Radius     float64
}

func main() {
    mars := &Planet{
        Name:       "Mars",
        Aphelion:   249.2,
        Perihelion: 206.7,
        Axis:       227939100,
        Radius:     3389.5,
    }

    earth := &Planet{
        Name:       "Earth",
        Aphelion:   151.930,
        Perihelion: 147.095,
        Axis:       149598261,
        Radius:     6371.0,
    }

    venus := &Planet{
        Name:       "Venus",
        Aphelion:   108.939,
        Perihelion: 107.477,
        Axis:       108208000,
        Radius:     6051.8,
    }

    planets := [...]Planet{*mars, *venus, *earth}

    log.Println("Original order:", planets)

    sort.Slice(planets[:], func(i, j int) bool {
        return planets[i].Axis < planets[j].Axis
    })

    log.Println("Order after sorting by axis:", planets)
}

In diesem Beispiel verwendet die Funktion sort.Slice einen Ausschnitt des Planeten-Arrays und eine Vergleichsfunktion als Argumente . Die Vergleichsfunktion bestimmt die Sortierreihenfolge. In diesem Fall prüft die Vergleichsfunktion, ob der Achsenwert des i-ten Elements kleiner als der des j-ten Elements ist.

Der Sortiervorgang ändert das Planetenarray an Ort und Stelle, sodass keine Notwendigkeit besteht um das sortierte Ergebnis einer neuen Variablen zuzuweisen.

Es ist wichtig zu beachten, dass sort.Slice das ursprüngliche Array ändert. Wenn Sie ein neues sortiertes Slice benötigen, können Sie vor dem Sortieren explizit eine Kopie des ursprünglichen Slice erstellen.

Das obige ist der detaillierte Inhalt vonWie sortiere ich Go-Strukturen nach benutzerdefinierten Feldern mit „sort.Slice'?. 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