我正在尝试在哈希中插入一个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
如何添加更多列表,只增加一个大小(这是正确的)。有没有办法正确初始化哈希 - 不要将大小增加到2。
答案 0 :(得分:5)
编辑添加:您的注释表明您希望元素'a'成为数组数组。这是:
h = Hash.new
h = {"a" => [["b","e"]]}
p h # => {"a"=>[["b", "e"]]}
h["a"] << ["d", "f"]
p h # => {"a"=>[["b", "e"], ["d", "f"]]}
在诊断问题时,请更好p
到puts
。 puts
可以隐藏重要的详细信息。让我们为p
添加一些调用,看看我们发现了什么。哦,我会将哈希的名称从“p”更改为“h”。否则就会有太多“p”了。
h = Hash.new
上述内容是不必要的。下一行将数组指定为“h”,覆盖此赋值。
h = {"a" => ["b","e"]}
p h # => {"a"=>["b", "e"]}
p h["a"].size # 2
一切都应该如此,即使是h [“a”]。尺寸返回2.为什么?
p h["a"] # => ["b", "e"]
因为h [“a”]是一个包含两个元素的数组。
h["a"] << ["d", "f"]
p h # => {"a"=>["b", "e", ["d", "f"]]}
你知道发生了什么事吗? <<
将一个元素附加到数组的末尾,该单个元素是数组[“d”,“f”]。这就是原因:
p h["a"].size # => 3
因为数组中确实有三个元素:字符串“b”和“e”,以及数组[“d”,“f”]。
如果您打算将元素“d”和“f”附加到数组中,请使用+=
执行此操作:
h = {"a" => ["b","e"]}
h["a"] += ["d", "f"]
p h # => {"a"=>["b", "e", "d", "f"]}