我想对我的数组进行排序:
p1q1
p1q10
p1q2
这个顺序:
p1q1
p1q2
p1q10
ie:通过增长p
整数,然后增加q
整数。
我正在尝试使用ids.sort { |id| id.to_i }
构造,但我可能正在重新发明轮子......执行此类操作的最可读/最简单的方法是什么?
答案 0 :(得分:3)
我能想到的最简单的方法是:
>> arr.sort_by { |id| id =~ /^p(\d+)q(\d+)$/ ; [$1.to_i, $2.to_i] }
=> ["p1q1", "p1q2", "p1q10"]
答案 1 :(得分:0)
这应该适用于任意深度,而不仅仅是两个层次:
ids.sort_by { |id| id.scan /\d+/ }
答案 2 :(得分:-1)
我会这样:
def p_q_str_to_num(str)
str =~ /p(\d+)q(\d+)/
($1+$2).to_i
end
a = ["p1q1", "p1q10", "p1q2"]
a.sort {|x,y| p_q_str_to_num(x) <=> p_q_str_to_num(y)}
返回:
["p1q1", "p1q2", "p1q10"]