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

时间:2016-03-23 18:18:23

标签: ruby haml middleman

我想转换以下哈希数组:

[{: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"]]

我很接近,但我还没有弄清楚如何压扁并获得理想的结果。

1 个答案:

答案 0 :(得分:3)

我尝试使用数组上的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"}]