ホームページ > バックエンド開発 > Golang > Go で構造体のスライスを「time.Time」メンバーごとに効率的にソートする方法

Go で構造体のスライスを「time.Time」メンバーごとに効率的にソートする方法

Barbara Streisand
リリース: 2024-11-30 14:45:13
オリジナル
623 人が閲覧しました

How to Efficiently Sort a Slice of Structs by a `time.Time` Member in Go?

Go での Time.Time メンバーによる構造体配列の並べ替え

Go では、特定のメンバーによるデータ構造の並べ替えを次のように実行できます。パッケージの並べ替え。これは、日付または時刻フィールドに基づいて要素を時系列に並べる場合など、さまざまなシナリオで役立ちます。

time.Time メンバーに基づいて構造体のスライスを並べ替えるには、カスタム タイプを定義できます。これはsort.Interfaceインターフェイスを実装します。この型は次のメソッドを定義する必要があります:

  • Len() int: スライスの長さを返します。
  • Less(i, j int) bool: インデックスの要素かどうかを判断します。 i はインデックス j の要素より小さいです。
  • Swap(i, j int): インデックス i の要素を交換します。 j.

指定されたコードでは、これらのメソッドを実装する timeSlice 型を定義しました。ただし、Less メソッドは、ポインターを実際の値ではなく time.Time 値と比較します。これを修正するには、time.Time の Before メソッドを使用して時間値を直接比較します。

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

カスタム タイプを定義したら、sort.Sort 関数を使用してスライスを並べ替えることができます。ただし、Go バージョン 1.8 以降では、より効率的で簡潔な sort.Slice 関数を使用できます。

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

sort.Slice 関数は、ソートするスライスと比較関数を定義するクロージャ。この場合、インデックス i の要素がインデックス j の要素より小さい場合、クロージャは true を返し、それ以外の場合は false を返します。

スライスを並べ替えた後、要素は日付に基づいて昇順に並べられます。メンバー。

以上がGo で構造体のスライスを「time.Time」メンバーごとに効率的にソートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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