Turning a Hash of Arrays into an Array of Hashes in Ruby

后端 未结 7 1786
走了就别回头了
走了就别回头了 2020-12-30 07:19

We have the following datastructures:

{:a => [\"val1\", \"val2\"], :b => [\"valb1\", \"valb2\"], ...}

And I want to turn that into

7条回答
  •  太阳男子
    2020-12-30 08:03

    Using a functional approach (see Enumerable):

    hs = h.values.transpose.map { |vs| h.keys.zip(vs).to_h }
    #=> [{:a=>"val1", :b=>"valb1"}, {:a=>"val2", :b=>"valb2"}]
    

    And back:

    h_again = hs.first.keys.zip(hs.map(&:values).transpose).to_h
    #=> {:a=>["val1", "val2"], :b=>["valb1", "valb2"]}
    

提交回复
热议问题