对字符串整数标识符数组进行排序(如“chapter3lesson11”)

时间:2011-09-14 08:15:47

标签: ruby sorting

我想对我的数组进行排序:

p1q1
p1q10
p1q2

这个顺序:

p1q1
p1q2
p1q10

ie:通过增长p整数,然后增加q整数。

我正在尝试使用ids.sort { |id| id.to_i }构造,但我可能正在重新发明轮子......执行此类操作的最可读/最简单的方法是什么?

3 个答案:

答案 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"]