我想转换以下哈希数组:
[{: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"]]
我很接近,但我还没有弄清楚如何压扁并获得理想的结果。
答案 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"}]