嵌套散列数组
问题描述:
我有对象数组。我想写方法至极,我将使用像这样的: group(array, :category, :month, year)
并返回我一个哈希像这样:嵌套散列数组
{ 'some category => { '2009' => { '01' => [objects], '02 => [objects2]code } } }
这应该工作simmilar到GROUP_BY,但还没Ø想法做。我不知道如何处理组参数的数量。我可以组group(array, :category)
或group(array, :a, :b, :c, :d, :e)
任何帮助吗?
答
def group(array, *levels)
groups = {}
last = levels.pop
array.each do |obj|
curr = groups
levels.map {|level| obj.send(level) rescue nil }.each {|val| curr = (curr[val] ||= {}) }
idx = obj.send(last) rescue nil
(curr[idx] ||= []) << obj
end
groups
end