Heim >Backend-Entwicklung >Golang >Wie sortiere ich eine Go-Struktur richtig nach ihrem time.Time-Feld?

Wie sortiere ich eine Go-Struktur richtig nach ihrem time.Time-Feld?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-02 13:42:38209Durchsuche

How to Correctly Sort a Go Struct by its time.Time Field?

Sortieren einer Struktur nach ihrem time.Time-Feld

Sie versuchen, eine Struktur in Go nach ihrem time.Time-Feld zu sortieren, bei dem ein Problem aufgetreten ist. Das von Ihnen bereitgestellte Codefragment enthält eine benutzerdefinierte Sortierimplementierung, die einen Abschnitt Ihrer reviews_data-Struktur und eine Karte verwendet:

type timeSlice []reviews_data

func (p timeSlice) Len() int { return len(p) }
func (p timeSlice) Less(i, j int) bool { return p[i].date.Before(p[j].date) }
func (p timeSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }

Das von Ihnen gemeldete Problem besteht jedoch darin, dass das Ergebnis nicht korrekt sortiert ist. Dies kann mehrere Gründe haben:

  • Falscher Algorithmus: Überprüfen Sie Ihre Less-Funktion noch einmal, um sicherzustellen, dass sie das Datumsfeld korrekt mit der Before-Methode vergleicht, die bestimmt, ob die Das erste Mal ist früher als das zweite.
  • Schnittstellenimplementierung: Der timeSlice-Typ muss das vollständig implementieren sort.Interface durch Bereitstellung aller erforderlichen Methoden (Len, Less, Swap).
  • Gleichzeitiger Zugriff: Wenn Sie beim Sortieren gleichzeitig auf die Karte reviews_data_map zugreifen, kann dies zu inkonsistenten Ergebnissen führen . Verwenden Sie Synchronisierungstechniken wie Sperren, um dieses Szenario zu verhindern.

Verbesserte Lösung (Go 1.8 und höher):

Verwendung der in Go 1.8 eingeführten Funktion sort.Slice , können Sie Ihren Sortiercode vereinfachen:

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

Diese verbesserte Lösung nutzt die Sortierfunktionalität der Standardbibliothek und stellt so sicher ein zuverlässigerer und effizienterer Sortierprozess.

Das obige ist der detaillierte Inhalt vonWie sortiere ich eine Go-Struktur richtig nach ihrem time.Time-Feld?. 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