1

一連のネストされたハッシュ (任意の深さにネストされた) を一連のネストされた 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

このソリューションの問題は、配列が考慮されていないことです。

4

1 に答える 1