2014-11-05 38 views
1

我有假期的數組:紅寶石:分流/排序基於陣列的條件

Holiday.all       
Holiday Load (0.7ms) SELECT "holidays".* FROM "holidays" 
=> #<ActiveRecord::Relation [#<Holiday id: 1, name: "Dia da Confraternização Universal", holidayable_id: 1, holidayable_type: "Country", date: "2014-01-01", created_at: "2014-11-05 21:38:13", updated_at: "2014-11-05 21:38:13", verified?: false>, #<Holiday id: 2, name: "Natal", holidayable_id: 1, holidayable_type: "Country", date: "2014-12-25", created_at: "2014-11-05 22:02:33", updated_at: "2014-11-05 22:02:33", verified?: false>]> 

我想用它的日期月至裂棗的這個大陣,所以我結束了12數組(每個月一個)。

+1

你可以張貼實際的Ruby代碼? – Stefan 2014-11-05 22:34:06

+0

請全部給出一個數組的例子,用問題所需的少量元素以及所需的輸出。 – 2014-11-05 23:00:45

+0

如果您正在從數據庫中檢索這些數據,爲什麼不簡單地重複幾個月並逐月提取它們呢? – 2014-11-05 23:06:53

回答

3

你想使用的是Enumerable#group_by方法。

按塊的結果對集合進行分組。返回一個散列,其中的鍵是塊的評估結果,值是集合中與該鍵相對應的元素數組。

如果未給出任何塊,則返回枚舉器。

(1..6).group_by { |i| i%3 } #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]} 

例如

["12/25", "01/01", (...)].group_by { |date| date.split("/").first } 
+0

這就是我需要的。奇怪的是,「ruby/array」api頁面沒有提及「group_by」。 – 2014-11-05 23:09:43

+1

這是因爲它在這裏:[Enumerable#group_by](http://www.ruby-doc.org/core-2.1.1/Enumerable.html#method-i-group_by)。如果您對類「Enumerable」不熟悉,請進行瀏覽。這些方法可以用於所有類型的集合(例如數組,哈希,範圍,集合等)。 – 2014-11-05 23:27:21