algorithm - 按升序对 "d.mm"和 "dd.mm"日期进行排序

标签 algorithm go

我有 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/

相关文章:

go - 这两个字符串有什么区别?

algorithm - 就地插入排序 LISP

php - 遍历多个位置找到最短路线的算法

algorithm - Scala 中的邻接表路径

go - 如何发送多个命令但单独保存输出

go - 当一个结构包含另一个结构时,如何在 Go 中将一个结构转换为另一个结构?

php - 找出人口最多的年份(最有效的解决方案)

algorithm - 深度优先与广度优先

Go:在结构中声明一个 slice ?

Golang 使用 DYNAMIC 键解析 json