Rubyでは、次のようなリクエストパスからハッシュを構築する効率的な方法は何ですか。
/1/resource/23/subresource/34
次のようなハッシュに変換します。
{'1' => { 'resource' => { '23' => 'subresource' => { '34' => {} } } }
ありがとう
Rubyでは、次のようなリクエストパスからハッシュを構築する効率的な方法は何ですか。
/1/resource/23/subresource/34
次のようなハッシュに変換します。
{'1' => { 'resource' => { '23' => 'subresource' => { '34' => {} } } }
ありがとう
path = "/1/resource/23/subresource/34"
path.scan(/[^\/]+/).inject(hash = {}) { |h,e| h[e] = {} }
hash
=> {"1"=>{"resource"=>{"23"=>{"subresource"=>{"34"=>{}}}}}}
再帰的な解決策は、最も簡単な方法のようです。これは最も美しいわけではありませんが、機能します。
def hashify(string)
k,v = string.gsub(/^\//, '').split('/', 2)
{ k => v.nil? ? {} : hashify(v) }
end
正しく処理されない(おそらくそうである)エッジケースがあるかもしれませんが、それはあなたが与えた例を満たしています。