Go 中按Time.Time 成員對結構體數組進行排序
在Go 中,可以使用以下命令來按特定成員對資料結構進行排序包排序。這在各種場景中都很有用,例如當您想要根據日期或時間欄位按時間順序對元素進行排序時。
要根據 time.Time 成員對結構體切片進行排序,您可以定義自訂類型實作 sort.Interface 介面。類型必須定義以下方法:
在給定的程式碼中,您定義了一個實作這些方法的型別 timeSlice。但是,Less 方法將指標與 time.Time 值而不是實際值進行比較。若要解決此問題,您可以使用 time.Time 的 Before 方法直接比較時間值:
func (p timeSlice) Less(i, j int) bool { return p[i].date.Before(p[j].date) }
定義自訂類型後,您可以使用 sort.Sort 函數對切片進行排序。然而,對於Go 1.8 以上版本,您可以使用sort.Slice 函數,它更有效率且簡潔:
sort.Slice(timeSlice, func(i, j int) bool { return timeSlice[i].date.Before(timeSlice[j].date) })
sort.Slice 函數有兩個參數:要排序的切片和一個定義比較函數的閉包。在這種情況下,如果索引 i 處的元素小於索引 j 處的元素,則閉包傳回 true,否則傳回 false。
對切片進行排序後,元素將依日期升序排列會員。
以上是如何在 Go 中透過「time.Time」成員對結構體切片進行高效排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!