如何通过将字符串附加到特定值来更改哈希数组

How to change an array of hashes by appending a string to a certain value

我想转换以下哈希数组:

[{:text=>"Code", :url=>"#code"}, {:text=>"Output", :url=>"#output"}] 

通过将种子附加到 URL 值:

[{:text=>"Code", :url=>"#code1234"}, {:text=>"Output", :url=>"#output1234"}] 

到目前为止我有这个代码:

- t( :"code.tab" ).each do | obj |

    = obj.collect do | k, v |

        - if k.to_s == "url"
            - [ k, v + seed ].flatten
        - else
            - [ k, v ].flatten

这给了我:

[[:text, "Code"], [:url, "#code23324"]][[:text, "Output"], [:url, "#output23324"]]

我很接近,但我还没有想出如何展平并获得想要的结果。

我会尝试在数组上使用 map 并在散列上使用 merge 来解决这个问题:

>> a = [{:text=>"Code", :url=>"#code"}, {:text=>"Output", :url=>"#output"}]

>> a.map{|h| h.merge(url: h[:url] + '1234')}
=> [{:text=>"Code", :url=>"#code1234"}, {:text=>"Output", :url=>"#output1234"}]

或者,您可以更新代码,通过将每个子数组映射到散列来将结果转换为所需的形式:

>> b = [[:text, "Code"], [:url, "#code23324"]], [[:text, "Output"], [:url, "#output23324"]]

>> b.map(&:to_h)
=> [{:text=>"Code", :url=>"#code23324"}, {:text=>"Output", :url=>"#output23324"}]