如何指向哈希中的深层嵌套元素?

时间:2015-06-18 01:11:57

标签: ruby

以下,

a={a:{b:{c:[]}}}
d=a[:a][:b][:c]
d=[1]

如何d指向a[:a][:b][:c],以便在我更改d时,a[:a][:b][:c]也会更改?

a[:a][:b][:c] # => []

3 个答案:

答案 0 :(得分:3)

您应该更改数组对象,而不仅仅是为变量分配一个新数组。

使用

d.push 1

d[0] = 1

{{1}}

等等。

答案 1 :(得分:2)

这里的其他答案都很好,但让我们来看看你的代码:

d=a[:a][:b][:c]
puts d #[]
d=[1]
puts d #[1]

请记住,当您分配d=[1]之前,您在分配方面所做的一切都将丢失。当事情看起来很奇怪时,关于你如何分配一个变量的事情,以及你是否意外地重新分配它就像你一样。

因此,您可以看到正确的作业,例如:

d[0]=1 

将执行您想要的操作,因为[0]索引是您之前分配的要更改的内容。

希望这会有所帮助 - 如果您需要进一步澄清,请发表评论。

答案 2 :(得分:0)

分配给a[:a][:b][:c],而不是d

a[:a][:b][:c] = [1]