2013-10-28 3 views

답변

3

내부 변이가 필요하지 않습니다 (merge!). 나는 다음과 같이 할 것

hash = { 'a' => 1, 'b' => 2 } 

hash2 = Hash[hash.map{|k, v| [k + '_new', v] }] 

hash2 # => {"a_new"=>1, "b_new"=>2} 
+0

이렇게하면 'hash = hash [hash, hash.map {| k, v | [k + '_new', v]}]'해시를 업데이트하려면 ... –

+0

@BSeven : 네, 정확하게 요. –

0

: 나는 이런 식으로 뭔가 할 줄

hash = { 'a' => 1, 'b' => 2 } 
nw_hash = Hash.new { |hsh, key| hsh[key+'_new'] = hash[key] } 
hash.keys.each{|e| nw_hash[e] } 
nw_hash 
# => {"a_new"=>1, "b_new"=>2} 
2

을 수정하는 동안 직접 해시 불구하고 반복 할 수없는,하지만 당신은 keys을 반복 할 수 있습니다.

hash.keys.each{|k| hash["#{k}_new"] = hash.delete(k)} 
+1

내가 당신의 솔루션에 사용할 수있는 다양한 형용사를 훑어 보면서, 나는 '귀여운'것에 정착했다. (Nice.) –

+0

예, 분명히 귀엽다. –

1
hash.map { |k, v| {"#{k}_new" => v} }.reduce(:merge) 
2

골라 봐!

hash = hash.keys.reduce({}) {|h,k| h[k + '_new'] = hash[k]; h} 
관련 문제