【问题标题】:Sort an array with strings and numbers使用字符串和数字对数组进行排序
【发布时间】:2019-01-11 22:10:05
【问题描述】:

我花了几个小时搜索一个库或一种方法:

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

有人知道如何实现吗?

如果有人知道 swift 我已经找到了解决方案 here

【问题讨论】:

  • 这称为自然排序:golanglibs.com/search?q=natural+sort
  • 要添加到其他 cmets/answers,我建议避免使用此类数据进行排序。改为使用前导零对其进行规范化。问题是,除非您的问题很简单,否则您将遇到各种极端情况 - 例如,JimB 的答案假定某种格式并且会失败。清理数据而不是向后弯腰处理数据通常是值得的

标签: go natural-sort


【解决方案1】:

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

此示例假定始终有一个带有有效数字的 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
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2022-11-26
    • 2016-07-18
    相关资源
    最近更新 更多