2014-11-05 3 views
1

У меня есть массив праздников:Ruby: Split/Сортировка массива на основе условия

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

+0

Пожалуйста, дайте пример массива с минимальным количеством элементов, необходимых для вопроса, и желаемого вывода. –

+0

Если вы извлекаете данные из базы данных, почему бы просто не перебирать их в течение нескольких месяцев и не тянуть их по месяцам? –

ответ

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

Вот что мне нужно. Как ни странно, на странице api «ruby/array» не упоминается «group_by». –

+1

Это потому, что он находится здесь: [Enumerable # group_by] (http://www.ruby-doc.org/core-2.1.1/Enumerable.html#method-i-group_by). Если вы не знакомы с классом 'Enumerable', попробуйте просмотреть. Эти методы могут использоваться со всеми типами коллекций (например, массивы, хэши, диапазоны, множества и другие). –

Смежные вопросы