Go で Time.Time フィールドで構造体を並べ替える
型 time.Time のメンバーで構造体を並べ替えようとすると、ユーザーは予期しない結果が生じる可能性があります。この問題は、デフォルトの並べ替えパッケージに time.Time 値を並べ替える機能がないために発生します。
問題の説明:
提供された構造体 reviews_data には、date of というメンバーがあります。 「時間.時間」と入力します。ユーザーはカスタム スライス タイプ timeSlice を定義し、スライスを並べ替えるための Len、Less、および Swap メソッドを実装しました。彼らは、reviews_data のマップを timeSlice にマッピングし、スライスを並べ替えようとし、マップが日付値によって並べ替えられることを期待します。ただし、並べ替えは期待どおりに行われません。
解決策:
Go バージョン 1.8 以降の場合、代わりに sort.Slice 関数を使用することで問題を解決できます。ある意味、まあ。日付フィールドでスライスを並べ替える新しい構文は次のようになります。
sort.Slice(timeSlice, func(i, j int) bool { return timeSlice[i].date.Before(timeSlice[j].date) })
sort.Slice 関数は、並べ替えるスライスと比較関数を定義するクロージャを受け取ります。この場合、クロージャはスライス内の 2 つの要素の日付値を比較します。
説明:
Go 1.8 より前では、sort.Sort 関数は次のようなものしかありませんでした。 Sorter インターフェイスを実装した型で使用されます。 Go 1.8 以降では、sort.Slice が導入され、ユーザーはカスタム Sorter タイプの実装を必要とせずに、クロージャを使用してスライスを並べ替えることができます。
以上がGo 構造体を「time.Time」フィールドでソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。