Goで↓みたいな並び替えをしたい場合。
xxxで 降順、同じならyyyで降順、それも同じならzzzで降順。
素朴に書くとless関数がこんな感じになるんだけど…
if a.xxx < b.xxx {
return true
}
if a.xxx > b.xxx {
return false
}
if a.yyy < b.yyy {
return true
}
if a.yyy > b.yyy {
return false
}
return a.zzz < b.zzz
switch文で組み立てると{}がなくなるので少しマシになるみたい。
package main
import (
"fmt"
"sort"
)
type person struct {
firstName string
lastName string
age int
}
func main() {
people := []person{
{"taro", "tanaka", 20},
{"hanako", "suzuki", 21},
{"taro", "sato", 22},
{"taro", "sato", 21},
}
fmt.Println(people)
sort.Slice(people, func(i, j int) bool {
a, b := people[i], people[j]
switch {
case a.firstName < b.firstName:
return true
case a.firstName > b.firstName:
return false
case a.lastName < b.lastName:
return true
case a.lastName > b.lastName:
return false
default:
return a.age < b.age
}
})
fmt.Println(people)
}
しかし、もう少し短くできないだろうか。。