2011-01-22 9 views
7

私は配列または異なるオブジェクトを持ち、オブジェクトごとにグループ化したい。例Ruby group_byオブジェクト?

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

のために... 1つの配列内のオブジェクトをGROUPBYする方法上の任意のアイデアを私は

all.group_by(Object) 

を試してみましたが、それはうまくいきませんでしたか?

+0

あなたのオブジェクトは何ですか? – shingara

+0

私の質問では...私は4(グラフィック、コレクション、カテゴリ、ボリューム) – Trace

+0

グループ化しようとしている? – Jimmy

答えて

17

このようなことをお探しですか?

all.group_by(&:class) 

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

キーがグループ化要素であり、OBJキーのコレクションである彼らのクラス名コメントを

EDITによって意志グループ配列内のオブジェクトを

ので、これは希望のループグループ内の各グループを介して表示し、そのグループ内のオブジェクトを一覧表示します。

また、グループ内でも簡単に並べ替えることができます

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

はい、それは私に注文されたハッシュを与える...どのように私はビューでそれを使用します。すべてのコレクションを最初に表示し、すべてのグラフィックスなどを表示したいので、基本的には、この配列をモデルでグループ化してループしたいのですが、どのようにループするのですか? = ># Trace

+0

あなたの意図を反映するために私の答えが更新されました。私は – Jimmy

+0

に感謝します。これはすばらしい答えです...それらを4つの配列にグループ化して、たとえば、@graphicsを持つ1つの配列と@collectionsなどを持つ1つの配列... – Trace

関連する問題