2014-11-05 56 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