2011-01-22 18 views
7

Bir dizim veya farklı nesnelerim var ve nesnelere göre gruplamak istiyorum. ÖrneğinRuby group_by nesnesi?

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

için ... bir dizide nesneleri GroupBy konusunda herhangi bir fikir Ben

all.group_by(Object) 

çalıştı ama bu işe yaramadı?

+0

Nesneniz nedir? – shingara

+0

kendi sorum var ... 4 tane var (Grafik, Koleksiyon, Kategori, Cilt) – Trace

+0

Ne tür bir grup ile çalışıyorsunuz? – Jimmy

cevap

17

Böyle bir şey yapmak için mi arıyorsunuz?

all.group_by(&:class) 

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

Anahtar gruplama unsurudur ve obj anahtarının topluluğudur kendi sınıf adı yorum için

DÜZENLEME tarafından edecek grup dizideki nesneleri

, bu nedenle bu olurdu döngü Gruplandırmadaki her bir gruptan ve bu gruptaki nesneleri listelemek için

Ayrıca gruplandırmalar arasında kolayca sıralayabilirsiniz

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

evet ama bu bana düzenli bir karma verir ... bunu nasıl kullanırım? Tüm koleksiyonları ilk önce tüm Grafikler ve daha sonra görüntülemek istiyorum .... böylece temelde bu diziyi modellere göre gruplamak istiyorum ve daha sonra bunlardan geçiyorum ama bu şekilde nasıl geçersiniz… = > # Trace

+0

Cevabınızı, düşüncenizi yansıtacak şekilde güncelledim, sanırım – Jimmy

+0

teşekkürler Jimmy bu harika bir cevap ... Onları uygun bir nesneyle 4 dizi halinde nasıl gruplandıracağınızı biliyorsunuz ... örneğin @graphics ile bir dizi ve @collections ile sonraki ve böylece ... – Trace