jer*_*ith 9 ruby string hash name-value
如果我将ruby哈希变成一串名称 - 值对(例如,在HTTP参数中使用),这是最好的方法吗?
# Define the hash
fields = {"a" => "foo", "b" => "bar"}
# Turn it into the name-value string
http_params = fields.map{|k,v| "#{k}=#{v}"}.join('&')
Run Code Online (Sandbox Code Playgroud)
我想我的问题是:
有更简单的方法http_params吗?当然,上面的方法是有效的,并且相当简单,但我很好奇是否有办法从哈希到字符串而不先创建一个数组(map方法的结果)?
小智 8
来自The Pragmatic Programmer's Guide:
如果块只有一个参数,则传递给yield的多个参数将转换为数组.
例如:
> fields = {:a => "foo", :b => "bar"}
> fields.map { |a| a } # => [[:a, "foo"], [:b, "bar"]]
Run Code Online (Sandbox Code Playgroud)
所以你的代码可以像这样简化:
> fields.map{ |a| a.join('=') }.join('&') # => "a=foo&b=bar"
Run Code Online (Sandbox Code Playgroud)
这可能是你能做的最好的.您可以迭代哈希中的对,随时构建字符串.但在这种情况下,需要在每一步创建和删除中间字符串.
你有一个用例,这是一个性能瓶颈吗?一般来说,Ruby在幕后做了很多工作,担心像这样的临时数组可能不值得.如果您担心这可能是一个问题,请考虑分析代码的速度和内存使用情况,结果往往不是您所期望的.