在 Ruby 中,什么是从请求路径构造 Hash 的有效方法,例如:
/1/resource/23/subresource/34
变成一个看起来像这样的哈希:
{'1' => { 'resource' => { '23' => 'subresource' => { '34' => {} } } }
谢谢
在 Ruby 中,什么是从请求路径构造 Hash 的有效方法,例如:
/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
可能存在无法正确处理的极端情况(可能是),但它满足您给出的示例。