一連のネストされたハッシュ (任意の深さにネストされた) を一連のネストされた OpenStructs に変換するにはどうすればよいですか? 大きな YAML ファイルを読み込んでいますが、楽しめませんaccessing['everything']['like']['this']
。
Googleを使用して部分的な解決策をいくつか見つけましたが、これはここで良い質問になると思いました.
http://andreapavoni.com/blog/2013/4/create-recursive-openstruct-from-a-ruby-hashから見つけた解決策の 1 つを次に示します。
# deep_struct.rb
require 'ostruct'
class DeepStruct < OpenStruct
def initialize(hash=nil)
@table = {}
@hash_table = {}
if hash
hash.each do |k,v|
@table[k.to_sym] = (v.is_a?(Hash) ? self.class.new(v) : v)
@hash_table[k.to_sym] = v
new_ostruct_member(k)
end
end
end
def to_h
@hash_table
end
end
このソリューションの問題は、配列が考慮されていないことです。