2010-03-01 49 views
0

我想在哈希中插入一個列表..但是,哈希[鍵] .size給我無效的結果。數組散列給出不正確的大小結果 - Ruby

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

是如何在3線的大小爲2不正確的? p [「a」]是一個包含2個元素的數組。你想要的尺寸是什麼,爲什麼? – Pete 2010-03-01 04:54:38

+0

我想要類似'{「a」=> [[「b」,「e」],[「d」,「f」]]}'並且大小爲2. – BSingh 2010-03-01 05:21:56

回答

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」]。size returns 2. why?

p h["a"] # => ["b", "e"] 

因爲H [ 「一」]是具有兩個元件的陣列。

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"]} 
+0

感謝Wayne的回覆。我怎樣才能將[「b」,「e」]作爲數組而不是單獨的元素插入。我想要類似'{「a」=> [[「b」,「e」],[「d」,「f」]]}' – BSingh 2010-03-01 05:07:09

+2

@BSingh那麼爲什麼你沒有像'h = { 「a」=> [[「b」,「e」]]}'和'h [「a」] << [「d」,「f」]'? – MBO 2010-03-01 06:57:48

+0

@BSingh,我將MBO的建議添加到答案的頂部。 – 2010-03-02 19:37:24

相關問題