ruby-on-rails - 订购字母数字字符串的方法
问题描述
我在列上有一系列具有以下值的模型对象:
- 2018-A-1
- 2018-A-10
- 2018-A-2
- 2018-A-100
- 2018-A-11
- 2018-B-1
- 2018-B-10
- 2018-B-2
- 2018-B-100
- 2018-A-11
我想查询数据库并按字母数字顺序获取结果。我想按以下顺序获得结果:
- 2018-A-1
- 2018-A-2
- 2018-A-10
- ...
相反,我得到以下命令:
- 2018-A-1
- 2018-A-10
- 2018-A-100
- ...
有什么聪明的方法可以通过活动记录直接实现这一结果?
解决方案
在这里,我将您的示例数据重新声明为数组:
example_array = %w{2018-A-1 2018-A-10 2018-A-2 2018-A-100 2018-A-11 2018-B-1 2018-B-10 2018-B-2 2018-B-100 2018-A-11}
我不清楚您要获得什么订单。如果您尝试仅根据最后一个连字符后的数字进行排序,则应该可以:
example_array.sort_by{|e| e.split("-").last.to_i }
如果您还打算在最终数字之前包含该字母,也许这就是您想要的:
example_array.sort_by{|e| [e.split("-")[-2], e.split("-").last.to_i] }
推荐阅读
- xslt - XSLT 2.0 基于自闭合元素之间的内容输出 html 列表
- django - Django:需要手动渲染表单选项
- css - 防止 Safari iPad 上的弹性滚动
- c# - .net mvc 5 oauth2 服务器
- node.js - 无法编译构建
- variables - 根据 switch 语句更改变量类型
- ajax - 如何通过发布请求传递整个反应状态
- javascript - 在javascript中的对象方法中添加数字
- npm - NPM "deprecated Babel preset" 警告,多个 "gyp ERR!" 在使用 NPM 安装的控制台中,无法升级 Babel
- java - 无法连接到硒中的数据库