複数条件でのsort.Sliceの書き方工夫
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)
}
しかし、もう少し短くできないだろうか。。
Author And Source
この問題について(複数条件でのsort.Sliceの書き方工夫), 我々は、より多くの情報をここで見つけました https://qiita.com/Hiraku/items/06d3600f8f000fcb5b15著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .