Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将哈希转换为名称-值对字符串_Ruby_String_Hash_Name Value - Fatal编程技术网

Ruby 将哈希转换为名称-值对字符串

Ruby 将哈希转换为名称-值对字符串,ruby,string,hash,name-value,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('&') 我想我的问题是: 有没有更简单的方法来访问http_params?诚然,上面的方法是有效的,而

如果我将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('&')
我想我的问题是:


有没有更简单的方法来访问http_params?诚然,上面的方法是有效的,而且相当简单,但是我很好奇是否有一种方法可以在不首先创建数组的情况下从散列到字符串(映射方法的结果)?

这可能是最好的方法。您可以遍历散列中的对,边走边构建字符串。但是在这种情况下,需要在每个步骤中创建和删除中间字符串

您是否有这样一个用例:这是一个性能瓶颈?一般来说,Ruby在幕后做了很多工作,因此担心这样的临时数组可能不值得。如果你担心这可能是一个问题,考虑你的代码的速度和内存使用,往往结果不是你所期望的。

< P>从实用程序员指南:

多个参数传递给一个收益率 如果块 他只有一个论点

例如:

> fields = {:a => "foo", :b => "bar"}
> fields.map  { |a| a } # => [[:a, "foo"], [:b, "bar"]]
因此,您的代码可以简化如下:

> fields.map{ |a| a.join('=') }.join('&') # => "a=foo&b=bar"

Rails在
Hash
类上提供了
to_query
方法。尝试:


字段。为了在Rails中查询,它还提供了一种将散列转换为参数的方法

示例1:将哈希值转换为参数

{param1:“value1”,param2:“value2”}。要进行查询

结果:

“param1=value1¶m2=value2”

示例2:将参数转换为hahs

params=“param1=value1¶m2=value2”

Rack::Utils.parse\u嵌套查询(params)

结果:

{“param1”=>“value1”、“param2”=>“value2”}


你的和我的一样。别忘了对值进行适当的编码。我看不出这有多简单。如果说有什么区别的话,它隐藏了“multiple parameters=>array”魔术背后的代码意图。我发现它更简单,因为它构造字符串而无需显式处理键和值。不过,我同意它的可读性较差。不,我并不担心这是一个性能问题——我只是对ruby还比较陌生,很好奇是否有一种“更简单”的方法。似乎每次我开始编写一个方法时,我都会发现一个ruby或rails方法可以做完全相同的事情(例如,
distance\u of\u time\u in\u words
):)美好的这正是我想要的。