フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

構造体のSliceを任意の順番にソートする方法

構造体の中に含まれる一部の要素を使って構造体のスライスを任意の順番にソートする方法です。

イメージとしては以下のような構造体がスライスに格納されているとします。

type user struct {
  name: string
  bloodType: string
}
  
Users = []user {
  {"tanaka", "O"}, 
  {"kikuchi", "A"}, 
  {"ito", "A"}, 
  {"ishikawa", "B"}, 
  {"kato", "AB"}, 
}
  
orderList := []string{"O", "AB", "A", "B"}

このUsersスライスをorderListに定義されたbloodType(血液型)で順番にソートするイメージです。

以下のgistでは曜日でのソートを実装してみました。

gistde0e2779b4d04fc6eca78d03156ae61d

$ go run sort_days.go                                                                                       Status: 0
Shuffle:
 [{Thursday} {Sunday} {Monday} {Friday} {Tuesday} {Wednesday} {Saturday}]
After Sort:
 [{Sunday} {Monday} {Tuesday} {Wednesday} {Thursday} {Friday} {Saturday}]

# orderListをMondayからにしてみる

$ go run sort_days.go                                                                                       Status: 0
Shuffle:
 [{Thursday} {Sunday} {Monday} {Friday} {Tuesday} {Wednesday} {Saturday}]
After Sort:
 [{Monday} {Tuesday} {Wednesday} {Thursday} {Friday} {Saturday} {Sunday}]