9

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ますか? 確かに、上記の方法は機能し、かなり簡単ですが、最初に配列 (メソッドの結果) を作成せずにハッシュから文字列に取得する方法があるかどうか知りmapたいですか?

4

4 に答える 4

10

Rails はクラスのto_queryメソッドを提供します。Hash試す:

fields.to_query

于 2012-11-27T08:42:32.100 に答える
8

The Pragmatic Programmer's Guideから:

ブロックに引数が 1 つしかない場合、yield に渡された複数のパラメーターは配列に変換されます。

例えば:

> fields = {:a => "foo", :b => "bar"}
> fields.map  { |a| a } # => [[:a, "foo"], [:b, "bar"]]

したがって、コードは次のように簡略化できます。

> fields.map{ |a| a.join('=') }.join('&') # => "a=foo&b=bar"
于 2009-12-01T06:14:02.700 に答える
5

これはおそらくあなたができる最善のことです。ハッシュ内のペアを反復処理して、文字列を作成することができます。ただし、この場合、各ステップで中間文字列を作成および削除する必要があります。

これがパフォーマンスのボトルネックとなるユースケースはありますか?一般に、Rubyは舞台裏で非常に多くの作業を行っているため、このような一時配列について心配する価値はないでしょう。問題が発生する可能性がある場合は、コードの速度とメモリ使用量をプロファイリングすることを検討してください。多くの場合、期待どおりの結果は得られません。

于 2009-12-01T04:25:15.213 に答える