Heim >Backend-Entwicklung >Golang >Wie sortiere ich Strukturen mit „time.Time'-Feldern in Go richtig?
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!