来自网址的红宝石建筑哈希

时间:2013-02-04 19:30:23

标签: ruby

在Ruby中,从请求路径构造哈希的有效方法是:

/1/resource/23/subresource/34

进入如下所示的哈希:

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

由于

2 个答案:

答案 0 :(得分:5)

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

hash
=> {"1"=>{"resource"=>{"23"=>{"subresource"=>{"34"=>{}}}}}}

答案 1 :(得分:1)

递归解决方案似乎是最简单的事情。这不是最漂亮的,但它确实有效:

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

可能存在无法正确处理的边缘情况(可能是),但它满足您给出的示例。