Array的hash给出了不正确的大小结果 - Ruby

时间:2010-03-01 04:47:14

标签: ruby

我正在尝试在哈希中插入一个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。

1 个答案:

答案 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"]]}

在诊断问题时,请更好pputsputs可以隐藏重要的详细信息。让我们为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"]}