首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按字母数字和字母顺序对数字进行排序

问按字母数字和字母顺序对数字进行排序
EN

Stack Overflow用户
提问于 2013-08-01 22:00:50
回答 2查看 4.8K关注 0票数 4

我在我的网站上有一个数据库,上面有一个很长的#(产品号)列表,所有的都包含字母(例如TC-345,TC-234或HC-236W 123-234-PWD...)

我们可以按数字和字母顺序对网站上的#进行排序吗?

目前我们按字母顺序存储,因此顺序为(10-PDW、100-PDW、110-PDW 2-PDW)我们希望将其更改为(2-PDW、10-PDW、100-PDW、110-PDW)

我的开发人员说:“colorway数字永远不能按数字排序。我们需要在数据库中为所有的colorway添加另一个数字字段,然后按数字排序。现在这些数字是按字母顺序排列的。”

如何对带有字母的数字进行排序?我们希望避免添加一个数值字段-那只是额外的工作。有没有新的技术可以做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2013-08-01 22:22:24

这是可能的。一种方法是使用一个函数来加权字符串,该函数赋予数字比字母更多的权重。如下所示:

代码语言:javascript
复制
letbers = ["10-PDW", "100-PDW", "110-PDW", "2-PDW"]

def weight(letber):
    if letber == "":
        return 0
    n = ord(letber[-1])
    if letber[-1] in "0123456789":
        n *= 256^6                  # 6 because maximum key length is 6
    return 256*n + weight(letber[:-1])

print sorted(letbers, key = weight)
票数 0
EN

Stack Overflow用户

发布于 2014-01-23 19:26:59

如果添加以下转换函数(在scala中),则可以按字母和数字顺序对所有字符串进行排序:

代码语言:javascript
复制
def transformed(s: String): String = {
  s.replaceAll("""(?<=[^\d]|^)(\d)(?=[^\d]|$)""","""000$1""")
   .replaceAll("""(?<=[^\d]|^)(\d\d)(?=[^\d]|$)""","""00$1""")
   .replaceAll("""(?<=[^\d]|^)(\d\d\d)(?=[^\d]|$)""","""0$1""")
}

基本上,它将每个出现的数字替换为一个固定宽度的整数,因此在这种情况下,按字母顺序排序与按数字排序相等。

测试您的输入:

代码语言:javascript
复制
> val s = List("10-PDW", "100-PDW", "110-PDW", "2-PDW")

> s.sortBy(transformed)

res2: List[String] = List(2-PDW, 10-PDW, 100-PDW, 110-PDW)

只有当您确定所有数字都低于9999时,此操作才有效。如果你有更多的数字,那么你应该考虑扩展函数或做一些其他的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17996193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档