[英]Ruby array of hashes unexpected behaviour
我試圖創建一個哈希數組,在這里我已經找到了一些很好的解決方案:
但是,當我自己嘗試時,我發現了一些我不理解的行為。
在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.