在Ruby中解释哈希

时间:2012-02-02 04:35:32

标签: ruby-on-rails ruby

我正在读一本由Jose Valim编写的Crafting Rails Applications书,并且遇到了一些我不理解的东西。我想知道是否有人可以解释下面三种类型的哈希之间的简单英语差异。

  1. 例如,嵌套哈希(如本例中所示)嵌套哈希的方式是什么。在其他情况下,我理解嵌套的哈希,但不要在这里得到它。

  2. 在第二个例子中,“数组”以什么方式成为“键”。对我而言,它看起来就像一个包含四个变量的数组。

  3. 第三个示例是以“hash as key”的哈希方式。

    嵌套哈希

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

    使用数组作为键的简单哈希

    @cached [[key,prefix,name,partial]]

    哈希为键的简单哈希

    @cached [:key => key,:prefix =>前缀,:name => name,:partial =>局部]

2 个答案:

答案 0 :(得分:6)

嵌套哈希是一个嵌套哈希。给出的示例@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"
}

希望有所帮助!

答案 1 :(得分:2)

哈希只是将对象与对象相关联。键和值可以是任何东西。

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

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

如果对象本身就是一个哈希,那么你会得到一个“hash with hash as key”。

请参阅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}],这意味着我们将哈希用作密钥。