示例数据:
["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'
之前感谢。
答案 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}