我的网站上有一个数据库,其中包含一长串#(产品编号),其中包含字母(Exp. 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)

我的开发人员说“配色编号永远不能按数字排序。我们需要为所有配色将另一个数字字段添加到数据库中,然后按数字对该字段进行排序。现在这些数字是按字母顺序排列的。”

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

最佳答案

有可能的。一种方法是使用一个函数来加权字符串,它赋予数字比字母更大的权重。像这样的东西:

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)

关于sorting - 按数字和字母顺序用字母对数字进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17996193/

10-16 09:56