1

Rubyでは、次のようなリクエストパスからハッシュを構築する効率的な方法は何ですか。

/1/resource/23/subresource/34

次のようなハッシュに変換します。

{'1' => { 'resource' => { '23' => 'subresource' => { '34' => {} } } }

ありがとう

4

2 に答える 2

5
path = "/1/resource/23/subresource/34"
path.scan(/[^\/]+/).inject(hash = {}) { |h,e| h[e] = {} }

hash
=> {"1"=>{"resource"=>{"23"=>{"subresource"=>{"34"=>{}}}}}}
于 2013-02-04T19:53:31.963 に答える
1

再帰的な解決策は、最も簡単な方法のようです。これは最も美しいわけではありませんが、機能します。

def hashify(string)
  k,v = string.gsub(/^\//, '').split('/', 2)  
  { k => v.nil? ? {} : hashify(v) }  
end 

正しく処理されない(おそらくそうである)エッジケースがあるかもしれませんが、それはあなたが与えた例を満たしています。

于 2013-02-04T19:53:16.780 に答える