【问题标题】:Ruby(Chef) - Convert hash into arrayRuby(Chef) - 将哈希转换为数组
【发布时间】:2026-01-05 14:20:05
【问题描述】:

我有一本带有哈希的厨师食谱。

foo = { 
  'herp' => 42, 
  'derp' => 84 
}

我有一个只能取数组的 LWRP 资源(bar)

iis_root 'some string' do
  bar []
end

如何将 'foo' 转换为数组,以便在资源 'bar' 中使用

寻找这样的东西:

[ "herp=42","derp=84"]

【问题讨论】:

    标签: arrays ruby hash chef-infra


    【解决方案1】:
    bar = foo.map{ |e| e.join("=")}
    => ["herp=42", "derp=84"]
    

    【讨论】:

    • 哦,你说得对,不用to_a,谢谢提醒。
    【解决方案2】:

    您可以像这样遍历哈希并将其转换为数组。

    ary = Array.New
    foo.each do |key, value|
      ary << key + "=" + value
    end
    

    这将创建您要查找的数组。

    【讨论】:

      【解决方案3】:

      您可以使用map

      foo.map { |key, value| key + "=" + value.to_s}
      => ["herp=42", "derp=84"]
      

      【讨论】:

        【解决方案4】:

        OscillatingMonkey 答案正确,但改动很少: 对于主题启动器,此代码完全符合您的需要。

        bar = Array.new([])
        foo.each do |key, value|
          bar << key + "=" + value.to_s
        end
        => ["herp=42", "derp=84"]
        

        【讨论】:

          【解决方案5】:

          我只会使用 map 和字符串插值:

          foo.map { |k, v| "#{k}=#{v}" }
          #=> ["herp=42", "derp=84"]
          

          【讨论】: