Pas*_*cal 1 ruby serialization
我该怎么做来编组数组的哈希?
以下代码仅打印{}.
s = Hash.new
s.default = Array.new
s[0] << "Tigger"
s[7] << "Ruth"
s[7] << "Puuh"
data = Marshal.dump(s)
ls = Marshal.restore( data )
p ls
Run Code Online (Sandbox Code Playgroud)
如果散列不包含数组,则可以正确恢复.
s = Hash.new
s.default = Array.new
s[0] << "Tigger"
s[7] << "Ruth"
s[7] << "Puuh"
Run Code Online (Sandbox Code Playgroud)
此代码更改默认值3次(这可能是转储中显示的内容),但它不会在散列中存储任何内容.尝试"put s [8]",它将返回[["Tigger"],["Ruth"],["Puuh"]].
Hash.default_proc会做你想要的
s = Hash.new{|hash,key| hash[key]=[] }
Run Code Online (Sandbox Code Playgroud)
但你无法组织一个过程.这将有效:
s = Hash.new
s.default = Array.new
s[0] += ["Tigger"]
s[7] += ["Ruth"]
s[7] += ["Puuh"]
Run Code Online (Sandbox Code Playgroud)
这是因为[] + = ["Tigger"]创建一个新数组.另一种方法是创建更少的数组:
s = Hash.new
(s[0] ||= []) << "Tigger"
(s[7] ||= []) << "Ruth"
(s[7] ||= []) << "Puuh"
Run Code Online (Sandbox Code Playgroud)
仅在密钥不存在时才创建新数组(nil).
| 归档时间: |
|
| 查看次数: |
2348 次 |
| 最近记录: |