У меня есть массив объектов, отсортированный по нескольким свойствам этих объектов. В порядке приоритетности эти свойства: foo
, bar
и baz
. Это означает, что объекты сначала сортируются по foo
; то подпоследовательности, имеющие одинаковое значение foo
, сортируются по bar
; и затем те, которые имеют те же значения foo
и bar
, сортируются по baz
.Создание вложенного хэша из отсортированного массива в Ruby-- recursive group_by
Я хотел бы превратить это в вложенный хеш, который отражает эту группировку. В основном я ищу рекурсивный 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 => {
...
},
...
}
Мне нравится 'хэш. merge (hash) {...} 'трюк. –
Сделал мой день, спасибо! – Daniel