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

标签 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"]]

我很接近,但我还没有弄清楚如何展平并获得所需的结果。

最佳答案

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

关于ruby - 如何通过将字符串附加到特定值来更改哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185807/

相关文章:

ruby - 覆盖变量而不重复名称

ruby - 如果和 ruby 在同一行

Javascript 仅适用于页面上的某些位置

ruby-on-rails - 如何将 erb 中的 Rails 整个应用程序转换为 haml

ruby-on-rails-3 - HAML:缩进具有共同内容的if/else语句

ruby - 中间人:构建后运行自定义操作

localization - 如何在 Middleman 中将本地化 (i18n) 与 Haml 结合使用

ruby - 如何使用 Ruby 压缩语句中的多个相同条件?

middleman - 如何仅在生产版本上渲染部分内容?

ruby - 如何访问 xlsx 文件现有内容的列/行信息