【发布时间】:2020-09-28 17:14:27
【问题描述】:
我有一个数组["Q10", "Q100", "Q1000", "Q1000a", "Q1001", "Q98"]。排序后得到如下结果:
['Q100', 'Q1000', 'Q1000a','Q98', 'Q10', 'Q1001'].sort
["Q10", "Q100", "Q1000", "Q1000a", "Q1001", "Q98"]
由于这种行为,我无法正确排序我的 ActiveRecord 对象。我有一个Question 的模型,它有一个字段label。我需要根据标签对其进行排序。所以标签为Q1 的问题将是第一个,标签为Q1a 的问题将紧随其后,依此类推。我得到了与上述数组示例中描述的 ActiveRecord 类似的顺序。我使用 postgresql 作为我的数据库。
现在我有 3 个问题。
- 为什么字母数字字符串排序会这样?
- 如何在不使用排序块的情况下实现所需的排序?
- 如何在 ActiveRecord 中实现排序?
【问题讨论】:
-
存在哪些标签模式/格式?
-
@stefan。它仅采用以下格式:字母然后数字,然后可能是也可能不是字母。
-
您想分别对每个部分进行排序吗?即按字母顺序按前导字母,然后按数字按数字,然后再按字母顺序按尾随字母(如果存在)
-
在我的情况下,我们可以忽略这封信。卡里已经详细回答了这个问题。它不仅解决了我的问题,还解决了我的模式可能出现的任何其他问题。请看一看。
-
我看到了 Cary 的回答,很棒(和往常一样)。但是您特别要求解决方案“不使用排序块” 和“在 ActiveRecord 中排序”——您的要求有变化吗?
标签: ruby-on-rails ruby postgresql sorting natural-sort