我有以下数组...
[ "global/20130102-001", "global/20131012-001, "country/uk/20121104-001" ]
我需要根据字符串的数字部分对数组进行排序。所以上面的内容将分类为:
[ "country/uk/20121104-001", "global/20130102-001", "global/20130112-001 ]
有没有办法调用.sort并忽略每个元素的第一部分,所以我只对数字进行排序?
答案 0 :(得分:4)
是的,有办法。您应该使用#sort_by
。它的块传递一个数组元素,并应返回元素的“可排序值”。在这种情况下,我们使用正则表达式来查找您的数字串(当然,您可以在那里使用另一个逻辑,就像在斜杠上拆分一样)。
arr = [ "global/20130102-001", "global/20131012-001", "country/uk/20121104-001" ]
arr.sort_by {|el| el.scan(/\d{8}-\d{3}/)} # => ["country/uk/20121104-001", "global/20130102-001", "global/20131012-001"]
答案 1 :(得分:4)
当然,只需使用sort_by
。
arr.sort_by do |s|
s.split('/').last
end