Это ответ на довольно старый вопрос, но я натолкнулся на него при реализации чего-то подобного, подумал, что я должен вмешаться для более эффективного метода.
Для простого двухуровневого глубокого хэша, как выше, вы также можете сделать что-то вроде этого:
d = h.inject({}) {|copy, (key, value)|
copy[key] = value.dup rescue value; copy
}
Я выполнил тест на хэш хэшей с 4k-элементами, каждый по несколько сотен байтов, и он был примерно на 50% быстрее, чем Marshal.dump / load
Конечно, он не такой полный, так как он не будет работать, если у вас есть хеш, например, значение поля «имя_проекта», но для простого двухуровневого хеша он работает отлично / быстрее. 1008 *