【问题标题】:is there a method to move 'up' a Hash tree in ruby?有没有一种方法可以在红宝石中“向上”移动哈希树?
【发布时间】:2011-09-19 03:05:53
【问题描述】:

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

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

人可以是任何东西。

所以,在我的代码中,我可以像这样直接访问“建筑”:dat['building'],现在有办法以某种方式向上,再次访问{'building' => {...}}

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

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

它看起来并没有犯罪(我认为),但我希望有更好的方法。

谢谢!

【问题讨论】:

  • 与这个问题无关,但'people' => [Person, Person]实际上是一个类数组,而不是一个人实例数组。此外,您可能希望考虑使用符号而不是字符串作为键。
  • 我认为没有必要“向上”移动。你有一个顶层句柄,变量dat。从那里,您可以到达任何“节点”。
  • @close voters:你投票结束的原因是英文略显蹩脚的部分吗?
  • @Andrew 我知道[Person, Person] 不是实例数组;我在上面的示例中使用了伪代码,但是感谢您指出这一点。而且我无法控制它们是字符串还是符号,因为我不生成哈希。哪个英文部分有点破? D:
  • “Let's”不应该有撇号,并且“is there a way to go up the tree”也不需要逗号?

标签: ruby hashtable


【解决方案1】:

简短的回答:不。

原因是这样的。

假设你有:

 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)或简单的图形结构。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 2012-12-19
    • 2014-03-05
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多