Ruby嵌套哈希语法&结构体

时间:2012-07-20 00:24:37

标签: ruby hash

我正在构建一个包含html元素,类名及其计数的树。

如何使用正确的语法构建此代码?

$html = {

    :p => [
        { 'quote' => 10 },
        { 'important' => 4 }
    ],
    :h2 =>  [
        { 'title' => 33 },
        { 'subtitle' => 15 }
    ]

}

我对嵌套的哈希语法感到困惑。谢谢你的帮助让我直截了当。

2 个答案:

答案 0 :(得分:4)

构建HTML树的简单方法可能是:

html = [
  { _tag: :p, quote: 10, important: 4 },
  { _tag: :h2, title: 33, subtitle: 15 },
]

其中html[0][:_tag]是标记名称,其他属性可通过html[0][attr]访问。根元素是一个数组,因为相同类型的多个元素(多个p aragraphs)可以存在于同一个命名空间中,而哈希只存储最后添加的一个。

允许嵌套内容的更高级示例:

tree = { _tag: :html, _contents: [
  { _tag: :head, _contents: [
    { _tag: :title, _contents: "The page title" },
  ]},
  { _tag: :body, id: 'body-id',  _contents: [
    { _tag: :a, href: 'http://google.com', id: 'google-link', _contents: "A link" },
  ]},
]}

答案 1 :(得分:3)

在定义HTML元素之后,你没有分配另一个哈希,而是一个列表,从你的问题标题我想你想直接嵌套另一个哈希。因此,您不是以方括号开头,而是使用另一个大括号:

$html = {
    :p => { 'quote' => 10, 'important' => 4 },
    :h2 =>  { 'title' => 33, 'subtitle' => 15 }
}

#Example
puts $html[:p]['quote']

将打印:

  

10

看一下Hash的构造函数文档,有不同的方法来初始化哈希值,也许你会找到一个更直观的方法。