2015-11-01 2 views
-2

Я хочу увеличить значение первого элемента на единицу. Я не понимаю, почему мой код не работаетИнкрементное значение в хеше

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

Я прибавление 1 к первому значению в sales_hash. Когда я распечатываю sales_hash, первое значение остается неизменным. Что я делаю не так?

+0

Может быть, вы хотите: 'ч => {: а => 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

* Хэши перечисляют свои значения в том порядке, в котором были вставлены соответствующие ключи. * - Но эта проблема совершенно не имеет отношения к проблеме op. – 7stud

+0

@ 7stud спасибо, я уточнил ответ, чтобы уточнить это. Я считаю, что это актуально, поскольку ОП пытается изменить хеш по позиции, а не по ключу. – tbrisker

+0

ОП не сказал, что знает, что является первым ключом. –