2013-01-23 64 views
0

我有以下陣列的一部分...排序一個Ruby陣列基於字符串

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

我需要基於字符串的數字部分的陣列進行排序。所以上述排序爲:

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

有沒有辦法來調用的.sort而忽略每個元素的第一部分,所以我只對數量排序?

+0

哪個數字部分?首先?第二?兩者的結合? – sawa

回答

3

是的,有一種方法。你應該使用#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"] 
+0

這看起來不錯,但不幸的是我使用的是v1.8.7 – user1074981

+0

我剛剛測試過它,並且這適用於Ruby 1.8.7。 –

+0

我得到了未定義的方法'sort_by!'對於#(NoMethodError)。沒有sort_by!方法在ruby文檔http://ruby-doc.org/core-1.8.7/Array.html – user1074981

4

當然,只是使用sort_by

arr.sort_by do |s| 
    s.split('/').last 
    end