更改哈希中的哈希不会更新第一个哈希吗



在本例中:

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}}。为什么不是这样,我该如何实现呢?

我试着重提,但这并没有解决我的问题。

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

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

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

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

精细的手册可能在这里有用:

新→new_hash
新建(obj(→new_hash
新建{| hash,key | block}→new_hash

返回一个新的空哈希。如果该散列随后被与散列条目不对应的密钥访问,则返回的值取决于用于创建散列的new的样式。在第一种形式中,访问返回nil。如果指定了obj,则此单个对象将用于所有默认值。如果指定了一个块,它将使用哈希对象和键进行调用,并且应该返回默认值。如果需要,块负责将值存储在哈希中。

最后一句话很重要:如果你想把密钥添加到哈希中,你必须确保这是你自己做的。

最新更新