Iterate over a deeply nested level of hashes in Ruby

后端 未结 8 1731
眼角桃花
眼角桃花 2020-12-05 00:13

So I have a hash, and for each level of the hash, I want to store its key and value. The problem is, a value can be another hash array. Furthermore, that hash can contain ke

相关标签:
8条回答
  • 2020-12-05 00:45
    class Hash
      def each_with_parent(parent=nil, &blk)
        each do |k, v|
          Hash === v ? v.each_with_parent(k, &blk) : blk.call([parent, k, v])
        end
      end
    end
    
    h = { :a => 1, :b => { :c => 3, :d => 4, :e => { :f => 5 } } }
    
    h.each_with_parent { |i| p i }
    # [nil, :a, 1]
    # [:b, :c, 3]
    # [:b, :d, 4]
    # [:e, :f, 5]
    
    0 讨论(0)
  • 2020-12-05 00:49

    Have you tried something like that?

    trios = []
    
    def save_trio(hash, parent = nil)
      hash.each do |key, value|
        value.kind_of?(Hash) ? save_trio(value, key) : trios << {:key => key, :value => value, :parent => parent}
      end
    end
    
    save_trio(myHash)
    
    0 讨论(0)
提交回复
热议问题