Ruby - 为哈希添加值会添加重复数据

时间:2015-05-27 17:42:45

标签: ruby-on-rails ruby multidimensional-array hash

当我访问嵌套哈希时,会发生一些奇怪的事情。 下面是我的嵌套哈希。

{
  "http://example.com"=>{
     "a-big_word"=>{
        "Another word"=>[]
     }
}, 
  "www.example.com"=>{
     "a-big_word"=>{
        "Another word"=>[]
     }
  }
}

如果我尝试使用以下内容添加内容

hash['www.example.com']['a-big_word']['Another word'] << {"key"=>"value"}

发生这种情况

   {
      "http://example.com"=>{
         "a-big_word"=>{
            "Another word"=>[{"key"=>"value"}]
         }
    }, 
      "www.example.com"=>{
         "a-big_word"=>{
            "Another word"=>[{"key"=>"value"}]
         }
      }
    }

1 个答案:

答案 0 :(得分:3)

使用字符串而不是符号作为键。我拿了你的哈希并将密钥更改为字符串。现在它看起来像这样:

{"http://example.com"=>
   {"sublink"=>
      {"A word"=>[], :"Another word"=>[]},
   "sublinktwo"=>
      {"Hello"=>[], "World"=>[]}},
 "www.example.com"=>
   {"sublink"=>
      {"hi"=>[], "goodbye"=>[]},
    "sublinkthree"=>
      {"word"=>[], "bye"=>[]}
   }
}

如果您没有看到差异,我使用=>代替:的密钥。这样,Ruby就不会将密钥转换为符号,它会保持原样。

如何访问这些值?查看以下irb会话。

> hash["www.example.com"]
 => {"sublink"=>{"hi"=>[], "goodbye"=>[]}, "sublinkthree"=>{"word"=>[], "bye"=>[]}}
> hash["www.example.com"]["sublink"]
 => {"hi"=>[], "goodbye"=>[]}
> hash["www.example.com"]["sublink"]["hi"]
 => []

更改值:

> hash["www.example.com"]["sublink"]["hi"] << {"key"=>"value"}
 => [{"key"=>"value"}]