Heim > Backend-Entwicklung > Golang > Wie sortiere ich ein Segment von Strukturen effizient nach einem „time.Time'-Mitglied in Go?

Wie sortiere ich ein Segment von Strukturen effizient nach einem „time.Time'-Mitglied in Go?

Barbara Streisand
Freigeben: 2024-11-30 14:45:13
Original
562 Leute haben es durchsucht

How to Efficiently Sort a Slice of Structs by a `time.Time` Member in Go?

Sortieren eines Strukturarrays nach Time.Time-Mitglied in Go

In Go kann das Sortieren einer Datenstruktur nach einem bestimmten Mitglied mit erfolgen Paketsortierung. Dies ist in verschiedenen Szenarios nützlich, beispielsweise wenn Sie Elemente chronologisch basierend auf einem Datums- oder Zeitfeld ordnen möchten.

Um einen Teil von Strukturen basierend auf einem time.Time-Mitglied zu sortieren, können Sie einen benutzerdefinierten Typ definieren das die Schnittstelle sort.Interface implementiert. Dieser Typ muss die folgenden Methoden definieren:

  • Len() int: Gibt die Länge des Slice zurück.
  • Less(i, j int) bool: Bestimmt, ob das Element am Index ist i ist kleiner als das Element am Index j.
  • Swap(i, j int): Vertauscht die Elemente an den Indizes i und j.

Im angegebenen Code haben Sie einen Typ timeSlice definiert, der diese Methoden implementiert. Allerdings vergleicht die Less-Methode die Zeiger mit den time.Time-Werten und nicht mit den tatsächlichen Werten. Um dies zu beheben, können Sie die Before-Methode von time.Time verwenden, um die Zeitwerte direkt zu vergleichen:

func (p timeSlice) Less(i, j int) bool {
    return p[i].date.Before(p[j].date)
}
Nach dem Login kopieren

Sobald Sie den benutzerdefinierten Typ definiert haben, können Sie das Slice mit der Funktion sort.Sort sortieren. Für Go-Versionen 1.8 und höher können Sie jedoch die Funktion sort.Slice verwenden, die effizienter und prägnanter ist:

sort.Slice(timeSlice, func(i, j int) bool {
    return timeSlice[i].date.Before(timeSlice[j].date)
})
Nach dem Login kopieren

Die Funktion sort.Slice benötigt zwei Argumente: das zu sortierende Slice und ein Abschluss, der die Vergleichsfunktion definiert. In diesem Fall gibt der Abschluss true zurück, wenn das Element am Index i kleiner als das Element am Index j ist, andernfalls false.

Nach dem Sortieren des Slice werden die Elemente basierend auf dem Datum in aufsteigender Reihenfolge angeordnet Mitglied.

Das obige ist der detaillierte Inhalt vonWie sortiere ich ein Segment von Strukturen effizient nach einem „time.Time'-Mitglied in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage