有没有办法在红宝石中“移动”哈希树?

时间:2011-06-21 00:22:24

标签: ruby hashtable

我有一个像这样的“哈希树”:

dat = {
    'building' => {'street' => 'High Street 10', 'people' =>[Person, Person]}
}

人可以是任何东西。

所以,在我的代码中,我直接访问'building',就像这样:dat['building'],现在是否有办法以某种方式在树上,再次访问{'building' => {...}}?< / p>

我目前有一个让我可以访问其中任何一个的功能:

    def info with_root = false
      with_root ? dat : dat['building']
    end #info

看起来并不坏(我认为),但我希望有更好的方法。

谢谢!

1 个答案:

答案 0 :(得分:2)

简答:不。

原因是这个。

假设你有:

 addr = {'street' => 'High Street 10', 'people' =>[Person, Person]}
 dat1 = {'building' => addr}
 dat2 = {'zip'=>55117, 'electricBillID'=>11223344, 'address' => addr

当你“向上”时会发生什么?你得到dat1或dat2?

如果你真的需要能够这样做 - 而且你做的并不明显 - 你需要使用更复杂的数据结构,其中包含指向包含对象的链接 - 类似于树(https) ://rubygems.org/gems/rubytree)或简单的图形结构。

并且,正如已经提到的,如果你只是挂在根对象上,你总是可以爬回哈希。