2011-01-22 4 views
7

У меня есть массив или разные объекты, и я хочу группировать объекты. НапримерОбъект Ruby group_by?

=> [#<Graphic id: 3...">, #<Collection id: 1....">, #<Category id:...">, #<Volume id: 15...">] 
all.size 
=> 4 

Я попытался

all.group_by(Object) 

, но это не работает ... какие-либо идеи о том, как GroupBy объекты в одном массиве?

+0

какой у вас объект? – shingara

+0

его в моем вопросе ... у меня 4 (Графика, Коллекция, Категория, Том) – Trace

+0

Какую собственность вы пытаетесь сгруппировать? – Jimmy

ответ

17

Вы хотите сделать что-то подобное?

all.group_by(&:class) 

, которые будут группировать объекты в массиве их именем класса

EDIT для комментария

all.group_by(&:class).each do |key, group| 
    group.each{|item| puts item} 
end 

Ключ является группировка элементов и OBJ является коллекция для ключа, так что это будет цикл через каждую группу в группе и перечислить объекты в пределах этой группы

Также вы можете легко сортировать по группам

all.group_by(&:class).each do |key, group| 
    group.sort_by(&:attribute).each{|item| puts item} 
end 
+0

Да, но это дает мне упорядоченный хэш ... как я могу использовать это в представлении. Я хочу отобразить все коллекции сначала, а затем всю графику и т. Д .... так что в основном я хочу использовать этот массив для группировки по моделям, а затем прокручивать их, но как вы проходите через это .... = > # Trace

+0

) Я обновил свой ответ, чтобы отразить ваши намерения, я думаю, – Jimmy

+0

благодарит Джимми, что это отличный ответ ... знаете ли вы, как сгруппировать их в 4 массива с соответствующими объектами ... так например, один массив с @graphics и следующий с @collections и т. д. ... – Trace

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