ホームページ > バックエンド開発 > Golang > Go 構造体を time.Time フィールドで正しく並べ替える方法

Go 構造体を time.Time フィールドで正しく並べ替える方法

Patricia Arquette
リリース: 2025-01-02 13:42:38
オリジナル
211 人が閲覧しました

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

構造体を time.Time フィールドでソート

Go で構造体を time.Time フィールドでソートしようとしています。問題が発生しました。あなたが提供したコードフラグメントには、reviews_data 構造体のスライスとマップを使用したカスタム並べ替え実装が含まれています:

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] }
ログイン後にコピー

ただし、報告された問題は、結果が正しく並べ替えられないことです。これには、いくつかの理由が考えられます。

  • アルゴリズムが正しくありません: Less 関数を再確認して、Before メソッドを使用して日付フィールドを正しく比較していることを確認します。初回は 2 回目よりも前です。
  • インターフェイス実装: timeSlice タイプは、必要なメソッド (Len、Less、Swap) をすべて提供することにより、sort.Interface を完全に実装する必要があります。
  • 同時アクセス: 並べ替え中にマップ reviews_data_map に同時にアクセスしている場合、一貫性のない結果が生じる可能性があります。このシナリオを防ぐには、ロックなどの同期技術を使用します。

改善された解決策 (Go 1.8 以降):

Go 1.8 で導入された sort.Slice 関数の使用、並べ替えコードを簡素化できます:

sort.Slice(timeSlice, func(i, j int) bool {
    return timeSlice[i].date.Before(timeSlice[j].date)
})
ログイン後にコピー

これにより改善されましたソリューションは標準ライブラリの並べ替え機能を使用し、より信頼性が高く効率的な並べ替えプロセスを保証します。

以上がGo 構造体を time.Time フィールドで正しく並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート