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

BSi*_*ngh 0 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
Run Code Online (Sandbox Code Playgroud)

如何,添加更多列表只增加一个大小(这是正确的).有没有办法正确初始化哈希 - 不要将大小增加到2.

Way*_*rad 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"]]}
Run Code Online (Sandbox Code Playgroud)

当诊断一个问题,宁愿pputs. 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)

  • @BSingh然后为什么你没有创建它像`h = {"a"=> [["b","e"]]}`和`h ["a"] << ["d","f "]`? (2认同)