2014-01-23 5 views

ответ

0

Как вы можете видеть в documentation, Hash#eachвозвращает оригинальный хэш, который затем присвоить new_hash.

ли это вместо:

hash = {:one => 1, :two => 2, :three => 3} 
new_hash = Hash[hash.map { |k, v| [k, v * 5] }] 
new_hash # => {:one=>5, :two=>10, :three=>15} 
+0

Благодарим вас за это, но я ищу больше объяснений, почему моя попытка кода не работает. –

+0

@ gwapEs9 Добавлено объяснение. – Agis

2

each возвращает исходный хэш. Вы должны построить новый:

new_hash = hash.map { |k, v| [k, v * 5] }.to_h 
#=> {:one=>5, :two=>10, :three=>15} 

Или Руби < 2,1

new_hash = Hash[hash.map { |k, v| [k, v * 5] }] 
#=> {:one=>5, :two=>10, :three=>15} 
0

можно сделать следующим образом:

hash = {:one => 1, :two => 2, :three => 3} 
new_hash = hash.reduce({}) { |h, (k, v) | h[ k ] = v.to_i * 5 ; h } 
# => {:one=>5, :two=>10, :three=>15} 
0

Когда блок задан, each метод Hash возвращает исходный хэш без изменений. См. ruby doc.

Смежные вопросы