Sortieren einer Struktur nach dem Time.Time-Feld in Go
Beim Versuch, eine Struktur nach ihrem Member vom Typ time.Time zu sortieren, Benutzer kann zu unerwarteten Ergebnissen führen. Dieses Problem tritt auf, weil dem Standardsortierpaket die Funktionalität zum Sortieren von Zeitwerten fehlt.
Problembeschreibung:
Die bereitgestellte Struktur „reviews_data“ hat ein Mitglied namens date of Geben Sie time.Time ein. Benutzer haben einen benutzerdefinierten Slice-Typ, timeSlice, definiert und die Methoden Len, Less und Swap zum Sortieren des Slice implementiert. Sie versuchen, eine Karte von reviews_data auf timeSlice abzubilden, den Slice zu sortieren und erwarten, dass die Karte nach ihren Datumswerten sortiert wird. Die Sortierung erfolgt jedoch nicht wie erwartet.
Lösung:
Für Go-Versionen 1.8 und höher kann das Problem stattdessen durch die Verwendung der Funktion sort.Slice behoben werden Art. Art. Art. Die neue Syntax zum Sortieren des Slice nach dem Datumsfeld wäre:
sort.Slice(timeSlice, func(i, j int) bool { return timeSlice[i].date.Before(timeSlice[j].date) })
Die Funktion sort.Slice nimmt das zu sortierende Slice und einen Abschluss, der die Vergleichsfunktion definiert. In diesem Fall vergleicht der Abschluss die Datumswerte zweier Elemente im Slice.
Erklärung:
Vor Go 1.8 konnte die Funktion sort.Sort nur sein Wird mit Typen verwendet, die die Sorter-Schnittstelle implementiert haben. In Go 1.8 und höher wurde sort.Slice eingeführt, das es Benutzern ermöglicht, Slices mithilfe eines Abschlusses zu sortieren, ohne dass die Implementierung eines benutzerdefinierten Sorter-Typs erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie sortiere ich eine Go-Struktur nach ihrem Feld „time.Time'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!