Go での Time.Time メンバーによる構造体配列の並べ替え
Go では、特定のメンバーによるデータ構造の並べ替えを次のように実行できます。パッケージの並べ替え。これは、日付または時刻フィールドに基づいて要素を時系列に並べる場合など、さまざまなシナリオで役立ちます。
time.Time メンバーに基づいて構造体のスライスを並べ替えるには、カスタム タイプを定義できます。これはsort.Interfaceインターフェイスを実装します。この型は次のメソッドを定義する必要があります:
指定されたコードでは、これらのメソッドを実装する 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 サイトの他の関連記事を参照してください。