我有 var keys []string
。键表示格式为 "D.MM"
或 "DD.MM"
的日期和月份。
例如:
1.02(2 月 1 日)- 2.02(2 月 2 日)- 1.03(3 月 1 日)- 3.02(2 月 3 日)- 31.12(12 月 31 日)
我需要按如下方式对键进行排序:
[ '1.02', '2.02', '3.02', '1.03', '31.12' ]
。
首先是月份,然后是月份中的几天。
我首先尝试将字符串解析为 float64 数字,因为我认为使用数字会更容易(请参阅评论),但它似乎最糟糕。
我怎样才能做到这一点?
最佳答案
我想您需要一个 Go 程序。检查this one :
package main
import (
"fmt"
"sort"
"strings"
)
type ByDay struct { sort.StringSlice }
func (a ByDay) Less(i, j int) bool {
dmi, dmj := strings.Split(a.StringSlice[i], "."), strings.Split(a.StringSlice[j], ".")
return dmi[1] < dmj[1] || dmi[1] == dmj[1] && dmi[0] < dmj[0]
}
func main() {
days := []string{"3.03", "3.02", "2.02", "3.01", "1.03", "1.02"}
sort.Sort(ByDay{days})
fmt.Println(days)
}
它打印[3.01 1.02 2.02 3.02 1.03 3.03]
。
我怀疑 ByDay
是最好的名字,你最好给它一个更具描述性的名字。
关于algorithm - 按升序对 "d.mm"和 "dd.mm"日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49979881/