Go で Time.Time による構造体の並べ替え
time.Time 型のメンバー フィールドに基づいた構造体の並べ替えは、Go の一般的なタスクです。プログラミング。解決策を理解するために、問題を詳しく調べてみましょう:
問題:
時刻を使用して構造体を並べ替えようとしたとき。カスタム並べ替え関数を使用して、日付と呼ばれる時間メンバー、結果のリストは並べ替えられないままになります。
カスタム並べ替え関数:
次のカスタム並べ替え関数を提供しました:
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] }
これらの関数は、Go での並べ替えに必要な sort.Interface インターフェイスを実装するカスタム タイプの timeSlice を定義します。
マップの並べ替え:
並べ替えを目的としましたその値の日付フィールドによるタイプ map[string]reviews_data のマップ。並べ替えコードは次のとおりです:
//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)
解決策:
この問題は、sort.Sort の呼び出しが間違っていることから発生します。 Go バージョン 1.8 以降の場合、スライスをソートする推奨方法は、sort.Slice:
sort.Slice(date_sorted_reviews, func(i, j int) bool { return date_sorted_reviews[i].date.Before(date_sorted_reviews[j].date) })
を使用することです。この構文は、ソートするスライスとソート関数を明示的に定義します。この更新されたコードを使用すると、構造体が日付フィールドで正しく並べ替えられます。
以上がGoで「time.Time」フィールドを含む構造体を正しくソートする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。