排序混合整数和字符串值的数组

时间:2016-07-05 23:20:44

标签: ruby

示例数据:

["A-1.jpg", "A-2.jpg", "A-10.jpg", "A-101.jpg", "B-1.jpg", "B-2.jpg"]

我需要对它进行排序,以便所有A都是第一个,而数值是按升序排列的,例如: ' A-2'是在' a-10'之前这些都是在' b-1'

之前

感谢。

2 个答案:

答案 0 :(得分:3)

arr = ["A-1.jpg", "A-10.jpg", "A-2.jpg", "A-101.jpg", "B-1.jpg", "B-2.jpg"]
arr.sort_by { |s| first, last = s.split("-"); [first, last.to_i] }

 => ["A-1.jpg", "A-2.jpg", "A-10.jpg", "A-101.jpg", "B-1.jpg", "B-2.jpg"] 

答案 1 :(得分:0)

["A-1.jpg", "A-2.jpg", "A-10.jpg", "A-101.jpg", "B-1.jpg", "B-2.jpg"].sort_by{|s| s =~ /^(\w)-(\d+)\.jpg$/ && $1.ord * 1000 + $2.to_i}