基于字符串的一部分对Ruby数组进行排序

时间:2013-01-23 03:48:07

标签: ruby arrays sorting

我有以下数组...

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

我需要根据字符串的数字部分对数组进行排序。所以上面的内容将分类为:

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

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

2 个答案:

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