- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在这个例子中:
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_hashReturns 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 returnsnil
. 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/
我是一名优秀的程序员,十分优秀!