2015-11-01 89 views
-2

我想將第一個項目的值加1。我不明白爲什麼我的代碼不工作增加散列值

puts sales_hash 
sales_hash.values[0] = sales_hash.values[0] +1 
puts sales_hash 

我在sales_hash加1第一個值。當我打印出sales_hash時,第一個值保持不變。我究竟做錯了什麼?

+0

也許你想:'H => {:A => 1,B => 2 }; h [h.keys.first] + = 1; h#=> {:a => 2,:b => 2}'。以這種方式使用散列鍵的順序是不尋常的,但是你可以這樣做。 –

回答

2

當您使用Hash#values時,您會收到一個數組,其中包含散列中所有值的副本。因此,您的分配不會更改散列本身,而是包含值的數組。另外,你應該知道散列中的元素是按照它們的鍵的插入順序排序的,如果你訪問散列中的某個「位置」,這可能會導致意想不到的結果,因爲插入和刪除可能會改變哈希。

如果要更新哈希值,你應該使用它的鍵來訪問它,例如:sales_hash[:my_sale] = sales_hash[:my_sale] +1

+0

*哈希枚舉它們的值的順序是插入相應的鍵。* - 但這個問題與操作的問題完全無關。 – 7stud

+0

@ 7stud謝謝,我已經更新了答案,以更清楚地陳述。我相信它是相關的,因爲OP正試圖通過位置而不是按鍵修改散列。 – tbrisker

+0

OP沒有說他/她知道什麼是第一個關鍵。 –