1

我有以下数组...

[ "global/20130102-001", "global/20131012-001, "country/uk/20121104-001" ]

我需要根据字符串的数字部分对数组进行排序。所以上面的排序如下:

[ "country/uk/20121104-001", "global/20130102-001", "global/20130112-001 ]

有没有办法调用 .sort 并忽略每个元素的第一部分,所以我只对数字进行排序?

4

2 回答 2

6

当然,只需使用sort_by.

  arr.sort_by do |s| 
     s.split('/').last
  end
于 2013-01-23T03:55:02.277 回答
4

是的,有办法。你应该使用 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"]
于 2013-01-23T03:51:36.010 回答