Golang でのソート処理をメモ。
Groovy(Java) の場合は、こんなコードになります。 Itemクラスを Comparable にする、という方法もありますが、 ここでは Comparator を使ってソートする方式で書きます。
class Item {
String title
String ymd
String toString(){
return "$title, $ymd"
}
}
class ByYmd implements Comparator<Item> {
int compare(Item item0, Item item1){
return item1.ymd.compareTo(item0.ymd)
}
}
def itemList = [
new Item([title: "About Thinkpad 2018", ymd: "2018-01-01"]),
new Item([title: "Thinkpad x1 nano", ymd: "2021-07-10"]),
new Item([title: "Thinkpad E460", ymd: "2019-03-29"])]
Collections.sort(itemList, new ByYmd())
itemList.each {
println "- $it"
}
実行すると:
- Thinkpad x1 nano, 2021-07-10
- Thinkpad E460, 2019-03-29
- About Thinkpad 2018, 2018-01-01
これを Golang で書くと:
package main
import (
"fmt"
"sort"
)
type Item struct {
Title string
Ymd string
}
type ByYmd []Item
func (a ByYmd) Len() int { return len(a) }
func (a ByYmd) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByYmd) Less(i, j int) bool { return a[i].Ymd < a[j].Ymd }
func main() {
items := []Item{
{"About Thinkpad 2018", "2018-01-01"},
{"Thinkpad x1 nano", "2021-07-10"},
{"Thinkpad E460", "2019-03-29"},
}
sort.Sort(ByYmd(items))
for _, item := range items {
fmt.Println(fmt.Sprintf("- %s, %s", item.Title, item.Ymd))
}
}
sort by date (実際には sort.Sort(ByYmd(items))
) のように書けるのがうれしいですね。