Ruby数组按字母排序:混合数据数组的排序需求
解决Ruby混合数组的自定义排序问题
要实现你想要的排序效果,核心是给数组元素设定分组+数值排序的规则:先把带AB_前缀的元素归为一组,按后缀的数字从小到大排列;纯数字元素归为另一组,同样按数值从小到大排列,并且让AB_组整体排在纯数字组前面。
直接上可运行的Ruby代码:
original_array = ["AB_1020", "AB_950", "AB_50", "1000", "570"] sorted_array = original_array.sort_by do |item| if item.start_with?("AB_") # 标记为第一组(优先级高),提取后缀数字作为排序依据 [0, item.split("_").last.to_i] else # 标记为第二组(优先级低),直接转成整数排序 [1, item.to_i] end end puts sorted_array.inspect # 输出: ["AB_50", "AB_950", "AB_1020", "570", "1000"]
代码逻辑解释:
- 使用
sort_by方法,它会根据我们返回的排序键数组来排序:- 第一个元素是分组标记:
0代表AB_前缀组,1代表纯数字组。因为0 < 1,所以AB_组的所有元素会排在纯数字组前面。 - 第二个元素是实际的排序数值:对于
AB_元素,分割字符串取_后面的部分转成整数;纯数字元素直接转成整数。这样同组内的元素就会按数值从小到大排列。
- 第一个元素是分组标记:
这种方式既简洁又灵活,如果以后需要调整分组规则(比如新增其他前缀),只需要修改分组标记和数值提取逻辑即可。
内容的提问来源于stack exchange,提问作者urjit on rails
相关产品推荐
相关产品推荐

