ホームページ > バックエンド開発 > Golang > Goで「time.Time」フィールドを含む構造体を正しくソートする方法は?

Goで「time.Time」フィールドを含む構造体を正しくソートする方法は?

DDD
リリース: 2024-12-02 00:34:10
オリジナル
556 人が閲覧しました

How to Correctly Sort Structs Containing `time.Time` Fields in Go?

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

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