首页 > 解决方案 > 订购字母数字字符串的方法

问题描述

我在列上有一系列具有以下值的模型对象:

我想查询数据库并按字母数字顺序获取结果。我想按以下顺序获得结果:

相反,我得到以下命令:

有什么聪明的方法可以通过活动记录直接实现这一结果?

标签: ruby-on-railsrubynatural-sort

解决方案


在这里,我将您的示例数据重新声明为数组:

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] }

推荐阅读