我正在寻找如何在ruby中将数组内爆为hash中的字符串的最方便方法。数组只能在第一级中。
这是散列
{"type"=>["Auto"], "mark"=>["Skoda","VW"], "page-size"=>"5", "page"=>"1"}
我希望得到
{"type"=>"Auto", "mark"=>"Skoda, VW", "page-size"=>"5", "page"=>"1"}
我目前正在使用:
params.each do |k,v|
params[k] = v.join(' ') if v.is_a?(Array)
end
h = {"type"=>["Auto"], "mark"=>["Skoda", "VW"], "page-size"=>"5",
"page"=>"1"}
h.transform_values { |v| [v].join(' ') }
#=> {"type"=>"Auto", "mark"=>"Skoda VW", "page-size"=>"5",
# "page"=>"1"}
请参阅哈希#transform_values。这将返回一个新的散列,而不会改变现有的散列。
另请参阅数组#join,特别是"对于嵌套数组,join是递归应用的"。
注:
[["Skoda VW"]].join(' ')
#=> "Skoda VW"
["5"].join(' ')
#=> "5"
你很接近,你想用逗号加入:
一个衬垫:
hash.each {|k, v| hash[k] = v.join(', ') if v.is_a? Array }
可读性更强:
hash.map do |k, v|
hash[k] = v.join(', ') if v.is_a? Array
end