用字符串和数字对数组排序

时间:2019-01-11 22:10:05

标签: go natural-sort

我花了几个小时寻找lib或执行此操作的方法:

我有一个数组[] string {“ ex10”,“ ex2”,“ ex1”},在调用sort.Strings或使用sort.Slice与字节数组进行比较之后,我得到了结果[] string { “ ex1”,“ ex10”,“ ex2”}

有人知道如何实现吗?

如果有人知道我迅速找到了解决方法here

1 个答案:

答案 0 :(得分:2)

如果您不想按字典顺序对数字进行排序,则需要将其与字符串分开,并将其解析为整数。

此示例假定始终有一个带有有效数字的2个字母前缀,并相应地对该字符串进行切片:https://play.golang.org/p/LaX-pTr6etc

s := []string{"ex10", "ex2", "ex1"}

sort.Slice(s, func(i, j int) bool {
    if s[i][:2] != s[j][:2] {
        return s[i] < s[j]
    }
    ii, _ := strconv.Atoi(s[i][2:])
    jj, _ := strconv.Atoi(s[j][2:])
    return ii < jj
})