簡體   English   中英

Ruby哈希數組意外行為

[英]Ruby array of hashes unexpected behaviour

我試圖創建一個哈希數組,在這里我已經找到了一些很好的解決方案:

在Ruby中創建哈希數組

但是,當我自己嘗試時,我發現了一些我不理解的行為。

在IRB中創建哈希數組:

array_hashes = Array.new(7, Hash.new)

現在,在嘗試分配鍵時,將值對分配給數組:

array_hashes[1]["hello"] = 200

我在控制台中得到以下輸出:

=>[{"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}]

在所有數組元素上重復相同的key值,當我嘗試將另一個key值分配給單個數組元素時,結果相似

array_hashes[3]["world"] = 300
=>[{"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}] 

誰能解釋這個原因,特別是為什么即使在分配給單個元素時,哈希值也會在所有數組元素上重復出現。 謝謝!

使用的Ruby版本:1.9.3,已在Windows 7和OS X Yosemite上嘗試

因為該代碼的作用是重復的:

array_hashes = Array.new(7, Hash.new)

這是:

hash = Hash.new
array_hashes = [hash, hash, hash, hash, hash, hash, hash]

因此,同一對象在數組中包含7次。

但是您想做的是:

array_hashes = Array.new(7) { Hash.new }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM