我试图在哈希中插入一个List.但是,hash [key] .size给了我无效的结果.
p = Hash.new
p = {"a" => ["b","e"]}
puts p["a"].size #prints 2 ----This is the Problem
p["a"] << ["d", "f"]
puts p["a"].size #prints 3
puts p["a"][1] #prints e
puts p["a"][2] #prints df
Run Code Online (Sandbox Code Playgroud)
如何,添加更多列表只增加一个大小(这是正确的).有没有办法正确初始化哈希 - 不要将大小增加到2.
编辑添加:您的注释表明您希望元素'a'是一个数组数组.这里是:
h = Hash.new
h = {"a" => [["b","e"]]}
p h # => {"a"=>[["b", "e"]]}
h["a"] << ["d", "f"]
p h # => {"a"=>[["b", "e"], ["d", "f"]]}
Run Code Online (Sandbox Code Playgroud)
当诊断一个问题,宁愿p到puts. puts可以隐藏重要的细节.让我们添加几个电话p,看看我们发现了什么.哦,我会将哈希的名称从"p"更改为"h".否则就会有太多"p"了.
h = Hash.new
Run Code Online (Sandbox Code Playgroud)
以上行是不必要的.下一行将数组指定为"h",覆盖此赋值.
h = {"a" => ["b","e"]}
p h # => {"a"=>["b", "e"]}
p h["a"].size # 2
Run Code Online (Sandbox Code Playgroud)
一切都应该是应有的,甚至h ["a"].尺寸返回2.为什么?
p h["a"] # => ["b", "e"]
Run Code Online (Sandbox Code Playgroud)
因为h ["a"]是一个包含两个元素的数组.
h["a"] << ["d", "f"]
p h # => {"a"=>["b", "e", ["d", "f"]]}
Run Code Online (Sandbox Code Playgroud)
你看到发生了什么事吗? <<将单个元素附加到数组的末尾,该单个元素是数组["d","f"].这就是为什么:
p h["a"].size # => 3
Run Code Online (Sandbox Code Playgroud)
因为数组中确实有三个元素:字符串"b"和"e",以及数组["d","f"].
如果您打算将元素"d"和"f"附加到数组中,那么请执行以下操作+=:
h = {"a" => ["b","e"]}
h["a"] += ["d", "f"]
p h # => {"a"=>["b", "e", "d", "f"]}
Run Code Online (Sandbox Code Playgroud)