ホームページ >バックエンド開発 >Golang >Go 構造体を「time.Time」フィールドでソートするにはどうすればよいですか?

Go 構造体を「time.Time」フィールドでソートするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-03 18:19:09273ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。