2015-11-01 76 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没有说他/她知道什么是第一个关键。 –