これらのオブジェクトのいくつかのプロパティに従ってソートされたオブジェクトの配列があります。優先順位の高い順に、これらのプロパティは、、foo
およびbar
ですbaz
。これは、オブジェクトが最初にfoo
;でソートされることを意味します。foo
次に、同じ値を持つサブシーケンスがbar
;でソートされます。次に、同じ値を持つものfoo
は。bar
でソートされbaz
ます。
これを、このグループ化を反映するネストされたハッシュに変換したいと思います。基本的に私は再帰を探していEnumerable#group_by
ます。キーは、、、および;の値にfoo
なりbar
ますbaz
。値は、オブジェクトのサブハッシュまたは配列のいずれかになります。次に例を示します。
[obj1, obj2, ... objn].group_by_recursive(:foo, :bar, :baz)
#=> {
foo_val_1 => {
bar_val_1 => {
baz_val_1 => [
obj1,
obj2,
obj3
],
baz_val_2 => [
obj4,
obj5
]
},
bar_val_2 => {
baz_val_1 => [
obj6,
obj7
],
baz_val_2 => [
obj8
]
},
},
foo_val_2 => {
...
},
...
}