在Ruby中解释哈希

问题描述:

我正在读一本由Jose Valim编写的“手工制作Rails应用程序”,并遇到了一些我不明白的东西。我想知道是否有人能够在下面三种散列之间用简单英语解释不同之处。在Ruby中解释哈希

  1. 例如,以何种方式嵌套散列(如本例中表示的那样)是嵌套散列。在其他情况下,我了解嵌套哈希,但不要在这里获取它。

  2. 在第二个例子中,“数组”是一个“钥匙”。对我来说,它看起来就像一个有四个变量的数组。

  3. 第三个例子是以“hash as key”作为散列的散列方式。

    嵌套散列

    @cached [键] [前缀] [名称] [部分]

    简单散列与数组作为键

    @cached [[键,前缀,名称,局部] ]

    简单散列与散列作为键

    @cached [:密钥=>键,:前缀=>前缀,:名称=>名,:局部=>局部]

嵌套散列,很好,嵌套散列。所举的例子,@cached[key][prefix][name][partial],正显示出你的“路径”为特定值,所以在这种情况下,哈希可能是这个样子:

@cache = { 
    key => { 
    prefix => { 
     name => { 
     partial => "value" 
     } 
    } 
    } 
} 

对于简单的哈希与数组作为重点,他们”重新使用该4元素数组作为散列中的一个键。

@cache = { 
    [key, prefix, name, partial] => "value", 
    another_key => "another value" 
} 

对于简单的散列与散列作为关键字,它们正在使用的哈希值(注意,{}的所述散列是可选的,这会引起一些混乱)如在该键中的一个哈希值。

@cache = { 
    {:key => key, :prefix => prefix, :name => name, :partial => partial} => "value", 
    another_key => "another value" 
} 

希望有帮助!

+0

是的,它的确如此。非常感谢。 – Leahcim 2012-02-02 05:24:40

+0

我看着你的网站。也许你可以将hiree转换成浪漫的关系经理。这是很多人都有的问题。 – Leahcim 2012-02-02 05:29:07

哈希干脆联想对象到对象。键和值可以是任何东西。

如果一个对象本身就是一个散列,你可以称它为“嵌套散列”,因为在某种意义上它是在主散列内。

如果一个对象是一个数组,那么你会得到一个“数组作为键的散列”。

如果一个对象本身就是一个散列,那么你会得到一个“散列作为键的散列”。

有关这些不同情况的视觉表现,请参阅amfeng的答案。

您将需要对Ruby语法有所了解,以便在看到它们时识别不同的情况。

例如,要了解@cached[[key, prefix, name, partial]]您需要知道[key, prefix, name, partial]代表一个数组,因此您拥有的就像@cached[array],这意味着一个数组正被用作密钥。

当你看到这样@cached[key][prefix]你应该知道,它相当于(@cached[key])[prefix]因此该值对象(@cached[key])是某种对象的响应该[]方法。在这种情况下,它是一个嵌套散列,因为作者告诉过你,但如果你不知道该上下文,那么它可能是别的。

当你看到类似@cached[:key => key, :prefix => prefix, :name => name, :partial => partial]的东西时,你应该知道它等于@cached[{:key => key, :prefix => prefix, :name => name, :partial => partial}],这意味着我们使用散列作为键。