在嵌套哈希中内爆数组的最佳方法是什么



我正在寻找如何在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

相关内容

最新更新