我有以下数组...
[ "global/20130102-001", "global/20131012-001, "country/uk/20121104-001" ]
我需要根据字符串的数字部分对数组进行排序。所以上面的排序如下:
[ "country/uk/20121104-001", "global/20130102-001", "global/20130112-001 ]
有没有办法调用 .sort 并忽略每个元素的第一部分,所以我只对数字进行排序?
当然,只需使用sort_by
.
arr.sort_by do |s|
s.split('/').last
end
是的,有办法。你应该使用 a #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"]