gpt4 book ai didi

ruby - 更改散列内的散列不会更新第一个吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:51 24 4
gpt4 key购买 nike

在这个例子中:

2.2.2 :001 > a = Hash.new(Hash.new)
=> {}
2.2.2 :002 > a[1][2] = 3
=> 3
2.2.2 :003 > a
=> {}
2.2.2 :004 > a[1][2]
=> 3

在命令 003 之后,我期待 {1=>{2=>3}}。为什么不是这种情况,我怎样才能做到这一点?

我尝试重新哈希,但这并没有解决我的问题。

最佳答案

哈希的默认值是当您尝试访问不存在的键时返回的值。访问这样的 key 实际上不会将其添加到哈希中,因为您需要使用 default_proc:

d = { }
a = Hash.new { |h, k| h[k] = d }

请注意,默认值 d 是单独声明的,以便共享。如果你想区分默认哈希,那么你会说:

Hash.new { |h, k| h[k] = { } }

fine manual在这里可能有用:

new → new_hash
new(obj) → new_hash
new {|hash, key| block } → new_hash

Returns a new, empty hash. If this hash is subsequently accessed by a key that doesn’t correspond to a hash entry, the value returned depends on the style of new used to create the hash. In the first form, the access returns nil. If obj is specified, this single object will be used for all default values. If a block is specified, it will be called with the hash object and the key, and should return the default value. It is the block’s responsibility to store the value in the hash if required.

最后一句话很重要:如果您希望将 key 添加到哈希中,您必须确保自己做到这一点。

关于ruby - 更改散列内的散列不会更新第一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com