Heim >Backend-Entwicklung >Golang >Wie sortiere ich Strukturen mit „time.Time'-Feldern in Go richtig?

Wie sortiere ich Strukturen mit „time.Time'-Feldern in Go richtig?

DDD
DDDOriginal
2024-12-02 00:34:10590Durchsuche

How to Correctly Sort Structs Containing `time.Time` Fields in Go?

Sortieren von Strukturen nach Time.Time in Go

Sortieren von Strukturen basierend auf Mitgliedsfeldern vom Typ time.Time kann eine häufige Aufgabe in Go sein Programmierung. Um die Lösung zu verstehen, gehen wir näher auf das Problem ein:

Problem:

Beim Versuch, eine Struktur mit einem time.Time-Mitglied namens date mithilfe benutzerdefinierter Sortierfunktionen zu sortieren , die resultierende Liste bleibt unsortiert.

Benutzerdefinierte Sortierung Funktionen:

Sie haben die folgenden benutzerdefinierten Sortierfunktionen bereitgestellt:

type timeSlice []reviews_data

// Forward request for length
func (p timeSlice) Len() int {
    return len(p) 
}

// Define compare
func (p timeSlice) Less(i, j int) bool {
    return p[i].date.Before(p[j].date)
}

// Define swap over an array
func (p timeSlice) Swap(i, j int) {
    p[i], p[j] = p[j], p[i] 
}

Diese Funktionen definieren einen benutzerdefinierten Typ timeSlice, der die sort.Interface-Schnittstelle implementiert, die für die Sortierung in Go erforderlich ist.

Kartensortierung:

Sie wollten eine Karte nach Typ sortieren map[string]reviews_data nach dem Datumsfeld seiner Werte. Hier ist Ihr Sortiercode:

//Sort the map by date
    date_sorted_reviews := make(timeSlice, 0, len(reviews_data_map))
    for _, d := range reviews_data_map {
        date_sorted_reviews = append(date_sorted_reviews, d)
    }       
    sort.Sort(date_sorted_reviews)

Lösung:

Das Problem entsteht durch den falschen Aufruf von sort.Sort. Für Go-Versionen 1.8 und höher ist die empfohlene Methode zum Sortieren eines Slice die Verwendung von sort.Slice:

sort.Slice(date_sorted_reviews, func(i, j int) bool {
    return date_sorted_reviews[i].date.Before(date_sorted_reviews[j].date)
})

Diese Syntax definiert explizit das zu sortierende Slice und die Sortierfunktion. Durch die Verwendung dieses aktualisierten Codes werden Ihre Strukturen korrekt nach ihrem Datumsfeld sortiert.

Das obige ist der detaillierte Inhalt vonWie sortiere ich Strukturen mit „time.Time'-Feldern in Go richtig?. 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