数组到嵌套哈希

时间:2009-11-12 12:31:50

标签: ruby

我有一些对象。我想编写我将使用的方法,例如: group(array, :category, :month, year) 并会给我一个像这样的哈希:

{
  'some category => {
    '2009' => {
      '01' => [objects],
      '02 => [objects2]code
    }
  }
}

这应该与group_by相似,但我不知道这样做。我不知道如何处理群体参数的数量。我可以对group(array, :category)group(array, :a, :b, :c, :d, :e)

进行分组

任何帮助?

1 个答案:

答案 0 :(得分:2)

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