Ruby on rails Ruby-向哈希中添加值会添加重复数据
当我访问嵌套哈希时,会发生一些奇怪的事情。 下面是我的嵌套哈希Ruby on rails Ruby-向哈希中添加值会添加重复数据,ruby-on-rails,ruby,multidimensional-array,hash,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.
{
"http://example.com"=>{
"a-big_word"=>{
"Another word"=>[]
}
},
"www.example.com"=>{
"a-big_word"=>{
"Another word"=>[]
}
}
}
如果我尝试用下面的内容添加一些内容
hash['www.example.com']['a-big_-word']['other word']]value}
这种情况会发生
{
"http://example.com"=>{
"a-big_word"=>{
"Another word"=>[{"key"=>"value"}]
}
},
"www.example.com"=>{
"a-big_word"=>{
"Another word"=>[{"key"=>"value"}]
}
}
}
使用字符串而不是符号作为键。我把你的散列改成了字符串。现在看起来是这样的:
{"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"}]
>哈希[“www.example.com”][“sublink”][“hi”]“value”}
=>[{“键”=>“值”}]
您确定密钥名称吗?您说您使用的是hash[“www.example.com”][“sublink”][“hi”]
,但是正确的形式是hash[:“www.example.com”][:sublink][:hi]
看到区别了吗。。。符号!您可能会受到另一种语言的影响,如JavaScript。在Ruby中,当键不是符号时,应该使用操作符=>
。另外,您得到的是一个嵌套的散列
,而不是多维
{code>{name goes here}如果键在引号中,那么它应该始终是[:“key”]
?对于nil:NilClass,我得到了未定义的方法
[]=',不要使用符号,这太麻烦了。我将发布一个答案。@fguillen我已经使我的问题和代码示例更容易理解了,我将如何动态地将键创建为字符串?我正在创建循环中的关键点。。。。e、 g.hash[key]={}
不知道你的意思。。。要创建一个新键,只需在散列
对象中为该键分配一个值(任意值)<代码>散列[“一个键”]=“值”,就像您在JavaScript中通常所做的那样(尽管考虑到ruby语法)。露比是非常动态的,不像C或C++,你不需要保留内存或任何其他东西来创建新的对象。它似乎对我来说不起作用。我不知道我做错了什么。我将对上面的示例进行编辑,以使其更详细clear@MaxRose-柯林斯:所有的例子都经过测试,请检查你的代码或把你的脚本的更完整的版本。嗨,对不起,你是对的。我只是检查了我是如何构建嵌套哈希的,在循环中我使用它两次使用了一些键,所以我假设我将数据放入哈希的两个部分?