在ruby中将hash转换为string

时间:2016-04-09 16:30:06

标签: ruby hash

input = {:a=>{:type=>"list", :values=>[{:type=>"b", :id=>"123"}, {:type=>"b", :id=>"456"}]}}

输出应如下

{:new_name=>"123,456"}

我尝试使用这样的注入。不确定要包含在块内的内容

input.tap do |e|
 e[:a].try(:[], :values).inject({}) do |h, obj|
   h[:new_name] = **
 end
end

2 个答案:

答案 0 :(得分:1)

你得到了:

input = {:a=>{:type=>"list",
              :values=>[{:type=>"b", :id=>"123"},
                        {:type=>"b", :id=>"456"}
                       ]
             }
        }

让我们先简化一下:

a = input[:a][:values]
  #=> [{:type=>"b", :id=>"123"},
       {:type=>"b", :id=>"456"}]

现在拉出我们需要的字符串:

b = a.map { |h| h[:id] }
  #=> ["123", "456"]

最后,

{ "new_name" => b.join(',') }
  #=> {"new_name"=>"123,456"}

把这些全部放在一起,

{ "new_name" => input[:a][:values].map { |h| h[:id] }.join(',') }
  #=> {"new_name"=>"123,456"}

答案 1 :(得分:0)

{:new_name => input.values.first[:values].map{|hash| hash[:id]}.join(',')}
# => {:new_name=>"123,456"}

仅当您的输入哈希值始终具有相同的结构时才有效。