2011-01-22 13 views
7

Tengo una matriz u objetos diferentes y quiero agrupar por objetos. Por ejemploRuby group_by object?

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

Probé

all.group_by(Object) 

pero que no funcionó ... alguna idea sobre cómo GroupBy objetos en una matriz?

+0

¿cuál es su objeto? – shingara

+0

es en mi pregunta ... tengo 4 (Gráfico, Colección, Categoría, Volumen) – Trace

+0

¿Qué propiedad está intentando agrupar? – Jimmy

Respuesta

17

¿Está buscando hacer algo como esto?

all.group_by(&:class) 

Qué agrupará los objetos en una matriz mediante su nombre de la clase

EDITAR para hacer comentarios

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

clave es el elemento de agrupación y obj es la colección de la clave, por lo que este sería bucle a través de cada grupo en la agrupación y enumerar los objetos dentro de ese grupo

También podría ordenar dentro de las agrupaciones con bastante facilidad también

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

sí, pero eso me da un hash ordenado ... ¿cómo lo uso en la vista. Quiero mostrar primero todas las colecciones, luego todos los gráficos, etc., así que básicamente quiero usar esta matriz para agruparla por los modelos y luego recorrerla, pero ¿cómo se recorre este ... = > # Trace

+0

Actualicé mi respuesta para reflejar tu intención, creo que – Jimmy

+0

gracias a Jimmy que es una gran respuesta ... ¿sabes cómo agruparlos en 4 matrices, todo con los objetos adecuados ... para por ejemplo, una matriz con @graphics y la siguiente con @collections y así sucesivamente ... – Trace

Cuestiones relacionadas