的另一種方式,它不需要轉換日期字符串到日期的對象,是以下內容。
代碼
def sort_by_date(arr)
arr.sort_by { |h| h["date"].split('/').reverse }
end
如果arr
在適當的位置進行排序,用Array#sort_by!而非Enumerable#sort_by。
例
arr = [{ "name"=>"personA", "date"=>"23/09/1980" },
{ "name"=>"personB", "date"=>"01/04/1970" },
{ "name"=>"personC", "date"=>"03/04/1975" }]
sort_by_date(arr)
#=> [{ "name"=>"personB", "date"=>"01/04/1970" },
# { "name"=>"personC", "date"=>"03/04/1975" },
# { "name"=>"personA", "date"=>"23/09/1980" }]
說明
對於在例如arr
,sort_by
傳遞的arr
到其塊中的第一個元素,並將其分配給塊變量:
h = { "name"=>"personA", "date"=>"23/09/1980" }
然後計算:
a = h["date"].split('/')
#=> ["23", "09", "1980"]
然後:
b = a.reverse
#=> ["1980", "09", "23"]
類似地,我們得到b
等於:
["1970", "04", "01"]
和
["1975", "04", "03"]
每個其它兩個的的元素。
如果你看一下文檔的Array#<=>你會看到,這三個數組排序如下:
["1970", "04", "01"] < ["1975", "04", "03"] < ["1980", "09", "23"]
沒有必要將字符串元素轉換爲整數。
什麼是不關於上述?只要放下'.collect',如果你想修改它,添加'!'到'sort_by'。 – 2015-02-11 20:05:51
我認爲這是其中OP已經有工作代碼並希望知道是否有更優雅的方式的那些帖子之一,但OP應該更努力地向讀者說明這一點。 – 2015-02-11 20:09:53
感謝@PhilipHallstrom,它做到了。我有點困惑,雖然我原來的嘗試沒有重新排序原始數組,但它聽起來應該有? – CatsLoveJazz 2015-02-11 20:11:51