Массив для вложенного хэша - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть массив объектов. Я хочу написать метод, который я буду использовать, например: 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 Ответ

2 голосов
/ 12 ноября 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...